B. Nanami's Digital Board

题目连接:

http://www.codeforces.com/contest/434/problem/B

Description

Nanami is an expert at playing games. This day, Nanami's good friend Hajime invited her to watch a game of baseball. Unwilling as she was, she followed him to the stadium. But Nanami had no interest in the game, so she looked around to see if there was something that might interest her. That's when she saw the digital board at one end of the stadium.

The digital board is n pixels in height and m pixels in width, every pixel is either light or dark. The pixels are described by its coordinate. The j-th pixel of the i-th line is pixel (i, j). The board displays messages by switching a combination of pixels to light, and the rest to dark. Nanami notices that the state of the pixels on the board changes from time to time. At certain times, certain pixels on the board may switch from light to dark, or from dark to light.

Nanami wonders, what is the area of the biggest light block such that a specific pixel is on its side. A light block is a sub-rectangle of the board, in which all pixels are light. Pixel (i, j) belongs to a side of sub-rectangle with (x1, y1) and (x2, y2) as its upper-left and lower-right vertex if and only if it satisfies the logical condition:

((i = x1 or i = x2) and (y1 ≤ j ≤ y2)) or ((j = y1 or j = y2) and (x1 ≤ i ≤ x2)).

Nanami has all the history of changing pixels, also she has some questions of the described type, can you answer them?

Input

The first line contains three space-separated integers n, m and q (1 ≤ n, m, q ≤ 1000) — the height and width of the digital board, and the number of operations.

Then follow n lines, each line containing m space-separated integers. The j-th integer of the i-th line is ai, j — the initial state of pixel (i, j).

If ai, j = 0, pixel (i, j) is initially dark.

If ai, j = 1, pixel (i, j) is initially light.

Then follow q lines, each line containing three space-separated integers op, x, and y (1 ≤ op ≤ 2; 1 ≤ x ≤ n; 1 ≤ y ≤ m), describing an operation.

If op = 1, the pixel at (x, y) changes its state (from light to dark or from dark to light).

If op = 2, Nanami queries the biggest light block with pixel (x, y) on its side.

Output

For each query, print a single line containing one integer — the answer to Nanami's query.

Sample Input

3 4 5

0 1 1 0

1 0 0 1

0 1 1 0

2 2 2

2 1 2

1 2 2

1 2 3

2 2 2

Sample Output

0

2

6

Hint

题意

给你一个01矩阵,然后有两个操作,1是将x y取反,2是问以x,y为边界的最大全1矩形的面积是多少

题解:

其实就是瞎暴力……

一看数据范围,只要能做到修改操作是o(n)和查询操作是o(n)的就好了

这个直接用单调栈那种思想,直接暴力去莽一波就好了

对于每一个格子维护四个值,l[x][y],r[x][y],u[x][y],d[x][y]表示这个格子最多往四个方向延展多少

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1005;
int a[maxn][maxn],n,m,q,up[maxn][maxn],down[maxn][maxn],l[maxn][maxn],r[maxn][maxn];
int x,y,op;
void update()
{
a[x][y]=1-a[x][y];
for(int j=1;j<=m;j++)
if(a[x][j])
l[x][j]=l[x][j-1]+1;
else
l[x][j]=0;
for(int j=m;j>=1;j--)
if(a[x][j])
r[x][j]=r[x][j+1]+1;
else
r[x][j]=0;
for(int i=1;i<=n;i++)
if(a[i][y])
up[i][y]=up[i-1][y]+1;
else
up[i][y]=0;
for(int i=n;i>=1;i--)
if(a[i][y])
down[i][y]=down[i+1][y]+1;
else
down[i][y]=0;
}
void query()
{
if(a[x][y]==0)
{
printf("0\n");
return;
}
int ans = 0;
int U=1e9,D=1e9,L=1e9,R=1e9;
for(int i=y;i>=1;i--)
{
U=min(U,up[x][i]);
D=min(D,down[x][i]);
ans=max(ans,(U+D-1)*(y-i+1));
}
U=1e9,D=1e9,L=1e9,R=1e9;
for(int i=y;i<=m;i++)
{
U=min(U,up[x][i]);
D=min(D,down[x][i]);
ans=max(ans,(U+D-1)*(i-y+1));
}
U=1e9,D=1e9,L=1e9,R=1e9;
for(int i=x;i>=1;i--)
{
L=min(L,l[i][y]);
R=min(R,r[i][y]);
ans=max(ans,(L+R-1)*(x-i+1));
}
U=1e9,D=1e9,L=1e9,R=1e9;
for(int i=x;i<=n;i++)
{
L=min(L,l[i][y]);
R=min(R,r[i][y]);
ans=max(ans,(L+R-1)*(i-x+1));
}
printf("%d\n",ans);
}
int main()
{
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
if(a[i][j])
l[i][j]=l[i][j-1]+1;
for(int j=m;j>=1;j--)
if(a[i][j])
r[i][j]=r[i][j+1]+1;
}
for(int j=1;j<=m;j++)
{
for(int i=1;i<=n;i++)
if(a[i][j])
up[i][j]=up[i-1][j]+1;
for(int i=n;i>=1;i--)
if(a[i][j])
down[i][j]=down[i+1][j]+1;
}
for(int i=1;i<=q;i++)
{
scanf("%d%d%d",&op,&x,&y);
if(op==1)update();
else query();
}
}

Codeforces Round #248 (Div. 1) B. Nanami's Digital Board 暴力 前缀和的更多相关文章

  1. Codeforces Round #248 (Div. 1) D - Nanami's Power Plant 最小割

    D - Nanami's Power Plant 思路:类似与bzoj切糕那道题的模型.. #include<bits/stdc++.h> #define LL long long #de ...

  2. 构造水题 Codeforces Round #206 (Div. 2) A. Vasya and Digital Root

    题目传送门 /* 构造水题:对于0的多个位数的NO,对于位数太大的在后面补0,在9×k的范围内的平均的原则 */ #include <cstdio> #include <algori ...

  3. Codeforces Round #248 (Div. 2) (ABCD解决问题的方法)

    比赛链接:http://codeforces.com/contest/433 A. Kitahara Haruki's Gift time limit per test:1 second memory ...

  4. Codeforces Round #248 (Div. 1)——Nanami&#39;s Digital Board

    题目连接 题意: 给n*m的0/1矩阵,q次操作,每次有两种:1)将x,y位置值翻转 2)计算以(x,y)为边界的矩形的面积最大值 (1 ≤ n, m, q ≤ 1000) 分析: 考虑以(x,y)为 ...

  5. Codeforces Round #248 (Div. 2) C. Ryouko's Memory Note

    题目链接:http://codeforces.com/contest/433/problem/C 思路:可以想到,要把某一个数字变成他的相邻中的数字的其中一个,这样总和才会减少,于是我们可以把每个数的 ...

  6. Codeforces Round #248 (Div. 2)C 题

    题目:http://codeforces.com/contest/433/problem/C 没想到做法就各种纠结, 今天做的都快疯掉了, 太弱了, 等题解一出,就各种恍然大悟 不应该不应该 正文: ...

  7. Codeforces Round #248 (Div. 1) A. Ryouko's Memory Note 水题

    A. Ryouko's Memory Note 题目连接: http://www.codeforces.com/contest/434/problem/A Description Ryouko is ...

  8. Codeforces Round #248 (Div. 2) B称号 【数据结构:树状数组】

    主题链接:http://codeforces.com/contest/433/problem/B 题目大意:给n(1 ≤ n ≤ 105)个数据(1 ≤ vi ≤ 109),当中有m(1 ≤ m ≤  ...

  9. Codeforces Round #248 (Div. 2) B. Kuriyama Mirai's Stones

    题目简单描述就是求数组中[l,r]区间的和 #include <iostream> #include <vector> #include <string> #inc ...

随机推荐

  1. 为什么我们不要.NET程序员(读后有点想法,所以转来了) 注:本文来自CSDN

    也许你已经知道了,我们正在招聘最优秀的程序员.不错,每个人都这样说.但是我们的程序员能打败你们的——任何时候.比如,米奇虽然只有5英尺高,但他是一个有相当实力的击剑手.维托尔德以前是一个6’3″的职业 ...

  2. j-linkV8固件更新(任意版本)

    在使用j-link v8调试程序时,容易出现固件丢失或出错的情况,导致电脑不能识别,j-link上面的灯不亮.我今天刚刚遇到了这个情况,于是就拆开外壳,在网上搜索资料,发现刷固件相关的还真多,但是有一 ...

  3. linux用户权限 -> 系统基本权限

    比如rwxr-xr-x linux中正是这9个权限位来控制文件属主(User).属组(Group).其他用户(Other)基础权限. 用户对资源来说, 有三种角色 User(u): 属主用户(文件所有 ...

  4. mysql取以当前时间为中心的任意时间段的时间戳

    例如:取当前时间后一年的时间戳 SELECT UNIX_TIMESTAMP(date_sub(curdate(),interval -1 YEAR)) SELECT UNIX_TIMESTAMP(da ...

  5. local class incompatible: stream classdesc serialVersionUID = -2897844985684768944, local class serialVersionUID = 7350468743759137184

    local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = 2427 ...

  6. Filter过滤器-JavaWeb三大组件之一

    Servlet.Filter.Listener是JavaWeb的三大组件,给Web开发提供了很大的便利. 什么是Filter? Filter,过滤器.类似与生活中的净水器.空气净化器. JavaWeb ...

  7. jersey HTTP Status 400 - Bad Request

    原因是jersey 内置的转换器,只能做简单的类型转换如: 首先客户端提交上来的一定是String; String ----> String/Long/Boolean 这些基本的 可以转换,但是 ...

  8. HDU 2874 Connections between cities(LCA(离线、在线)求树上距离+森林)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2874 题目大意:给出n个点,m条边,q个询问,每次询问(u,v)的最短距离,若(u,v)不连通即不在同 ...

  9. Es官方文档整理-2.分片内部原理

    Es官方文档整理-2.分片内部原理 1.集群      一个运行的Elasticsearch实例被称为一个节点,而集群是有一个或多个拥有相同claster.name配置的节点组成,他们共同承担数据和负 ...

  10. svn 批量添加命令

    svn st | awk '{if ($1 == "?") {print $2} }' | xargs svn add