矩阵的最大面积子矩阵

ZJOI2007]棋盘制作 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

注意:维护单调递增序列时,删去的高度对前面的影响结束了,但是对后面依然有影响

//f[i][j]表示第i行第j列的高度
void judge(int x, int l, int r)//判断第x行的[l,r]
{
	int top;
	deque<int> q;
	for (int j = l; j <= r; j++)
	{
		top = j;
		while (!q.empty() && f[x][q.back()] > f[x][j])
		{
			top = q.back();//重点,
			ans = max(ans, (j - q.back()) * f[x][q.back()]);
			//正方形
			int mi = min((j - q.back()), f[x][q.back()]);
			ans1 = max(ans1, mi * mi);
			q.pop_back();
		}
		f[x][top] = f[x][j];//重点
		q.push_back(top);
	}
	while (!q.empty())
	{
		ans = max(ans, (r - q.front() + 1) * f[x][q.front()]);
		int mi = min((r - q.front() + 1), f[x][q.front()]);
		ans1 = max(ans1, mi * mi);
		q.pop_front();
	}
}
posted on 2022-04-07 13:39  naiji  阅读(51)  评论(0编辑  收藏  举报