codeforces 548B Mike and Fun
http://codeforces.com/problemset/problem/548/B
比赛的时候不懂为什么就没做出来.... 其实很容易想到一个o(q*(n+m))的做法... 就是每次更新,要同时更新当前更新行的最大连续和....O(m)可以完成...然后在O(n)扫一遍,找到所有行中的最大值。 然后需要注意的是,在第一次更改之前就要把每个行的最大值处理出来l.. 然后cf机器真是够快,O(nmq)的1.2S过。。。。
1
2
3
4
5
6
7
8 /* ***********************************************
9 Author :111qqz
10 Created Time :2016年02月19日 星期五 17时01分58秒
11 File Name :code/cf/problem/548B.cpp
12 ************************************************ */
13
14 #include <algorithm>
15 #include <cstdio>
16 #include <iostream>
17 #include <cstring>
18 #include <string>
19 #include <cmath>
20 #include <map>
21
22 using namespace std;
23 const int N=5E2+5;
24 int a[N][N];
25 int fans;
26 int n,m,q,x,y,cur,ans[N];
27 int main()
28 {
29 cin>>n>>m>>q;
30 for (int i = 1 ; i <= n;i++ )
31 {
32 for (int j = 1; j <= m ; j++ )
33 scanf("%d",&a[i][j]);
34 cur = 0;
35 for (int j = 1; j <=m ;j++ )
36 if (a[i][j]==1)
37 {
38 cur++;
39 ans[i]=max(cur,ans[i]);
40 }
41 else
42 {
43 cur = 0;
44 }
45 }
46 for ( int i = 1 ; i <= q; i++ )
47 {
48 scanf("%d %d",&x,&y);
49 a[x][y]=a[x][y]^1;
50 // if (i==3) cout<<a[x][y]<<"sadsadasd"<<endl;
51 cur = 0;
52 ans[x]=0;
53 for (int j = 1; j <=m ;j++ )
54 if (a[x][j]==1)
55 {
56 cur++;
57 ans[x]=max(cur,ans[x]);
58 }
59 else
60 {
61 cur = 0;
62 }
63 fans=-1;
64 for (int j = 1;j <= n ; j++ )
65 if (ans[j]>fans)
66 {
67 fans=ans[j];
68 }
69 cout<<fans<<endl;
70 }
71
72
73 return 0;
74 }
75
76
77