[luoguP1169] [ZJOI2007]棋盘制作(单调栈)
2017-05-06 21:32
267 查看
和玉蟾宫差不多
——代码
#include <cstdio> #include <iostream> using namespace std; const int MAXN = 2001; int n, m, ans1, ans2, top; int a[MAXN][MAXN][2], s[MAXN], r[MAXN], l[MAXN]; inline void work(int k) { int i, j; for(i = 0; i <= 1; i++) { a[k][0][i] = a[k][m + 1][i] = -1; top = 0; for(j = 1; j <= m + 1; j++) { while(top && a[k][s[top]][i] > a[k][j][i]) r[s[top--]] = j; s[++top] = j; } top = 0; for(j = m; j >= 0; j--) { while(top && a[k][s[top]][i] > a[k][j][i]) l[s[top--]] = j; s[++top] = j; } for(j = 1; j <= m; j++) { ans1 = max(ans1, min(a[k][j][i], r[j] - l[j] - 1) * min(a[k][j][i], r[j] - l[j] - 1)); ans2 = max(ans2, a[k][j][i] * (r[j] - l[j] - 1)); } } } int main() { int i, j, x; scanf("%d %d", &n, &m); for(i = 1; i <= n; i++) for(j = 1; j <= m; j++) { scanf("%d", &x); if((i + j) % 2) x ^= 1; a[i][j][x] = a[i - 1][j][x] + 1; } for(i = 1; i <= n; i++) work(i); printf("%d\n%d\n", ans1, ans2); return 0; }View Code
相关文章推荐
- 【LuoguP1169 bzoj1057】[ZJOI2007]棋盘制作
- 【zjoi2007】棋盘制作(悬线法+单调栈)
- 【BZOJ】1057: [ZJOI2007]棋盘制作(单调栈)
- [BZOJ1057][ZJOI2007]棋盘制作 单调栈
- 单调栈——BZOJ1057/Luogu1169 [ZJOI2007]棋盘制作
- [ZJOI2007]棋盘制作(洛谷1169)
- 【BZOJ1057】[ZJOI2007]棋盘制作【最大全0子矩阵】【单调栈】【悬链法】
- BZOJ 1057: [ZJOI2007]棋盘制作 单调栈裸题
- 【bzoj1057】【ZJOI2007】【棋盘制作】【悬线法+dp】
- 【ZJOI2007】【悬线法】棋盘制作
- 最大子矩阵 [ZJOI2007]棋盘制作
- [BZOJ1057][ZJOI2007]棋盘制作(极大子矩形)
- bzoj1057 [ZJOI2007]棋盘制作
- 1057: [ZJOI2007]棋盘制作
- [BZOJ1057][ZJOI2007]棋盘制作 (单调栈/悬线法)
- [bzoj1057][ZJOI2007]棋盘制作
- BZOJ1057 [ZJOI2007]棋盘制作
- [BZOJ]1057: [ZJOI2007]棋盘制作
- BZOJ1057: [ZJOI2007]棋盘制作
- 【BZOJ1057】【ZJOI2007】棋盘制作