B. Mike and Fun
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Mike and some bears are playing a game just for fun. Mike is the judge. All bears except Mike are standing in an n × m grid, there's exactly one bear in each cell. We denote the bear standing in column number j of row number i by (i, j). Mike's hands are on his ears (since he's the judge) and each bear standing in the grid has hands either on his mouth or his eyes.

They play for q rounds. In each round, Mike chooses a bear (i, j) and tells him to change his state i. e. if his hands are on his mouth, then he'll put his hands on his eyes or he'll put his hands on his mouth otherwise. After that, Mike wants to know the score of the bears.

Score of the bears is the maximum over all rows of number of consecutive bears with hands on their eyes in that row.

Since bears are lazy, Mike asked you for help. For each round, tell him the score of these bears after changing the state of a bear selected in that round.

Input

The first line of input contains three integers nm and q (1 ≤ n, m ≤ 500 and 1 ≤ q ≤ 5000).

The next n lines contain the grid description. There are m integers separated by spaces in each line. Each of these numbers is either 0 (for mouth) or 1 (for eyes).

The next q lines contain the information about the rounds. Each of them contains two integers i and j(1 ≤ i ≤ n and 1 ≤ j ≤ m), the row number and the column number of the bear changing his state.

Output

After each round, print the current score of the bears.

Sample test(s)
input
5 4 5
0 1 1 0
1 0 0 1
0 1 1 0
1 0 0 1
0 0 0 0
1 1
1 4
1 1
4 2
4 3
output
3
4
3
3
4

——————————————————————————————————————————————————————————————

本来挺简单的一道题,我却写得很复杂。不善于分析复杂度是硬伤啊!

———————————————————————————————————————————————————————————————

1. 读入复杂度N×M,这说明若果算法在与N×M相当的复杂度内是可以AC的

2. 对于一个长为L的01序列,可在O(L)时间内得到连续1的最大数目 (the maximum number of consecutive "1" s in it)。

int a[MAX_N];
int ans=, cur=;
for(int i=; i<=n; i++){
if(a[i]==){
cur++;
ans=max(ans, cur);
}
else cur=;
}

这个基本方法我却没想到,把简单问题搞得过于复杂,没怎么仔细考虑就决定用线段树维护,而且这线段树写得还很“丑陋”。

#include<bits/stdc++.h>
using namespace std;
const int MAX_N=;
//SegT_1
struct node{
int lb, rb;
int ma;
}T[MAX_N][MAX_N<<];
void renew(int i, int id){
node &now=T[i][id];
if(now.ma){
now.lb=now.rb=now.ma=;
}
else{
now.ma=now.lb=now.rb=;
}
}
void _renew(int i, int id, int L, int R){
node &fa=T[i][id], &ls=T[i][id<<], &rs=T[i][id<<|];
fa.lb=ls.lb==(R-L+)>>?ls.lb+rs.lb:ls.lb;
fa.rb=rs.rb==(R-L+)>>?rs.rb+ls.rb:rs.rb;
fa.ma=max(max(ls.ma, rs.ma), ls.rb+rs.lb);
}
void insert(int i, int id, int L, int R, int pos){
if(L==R){renew(i, id);return;}
int mid=(L+R)>>;
if(pos<=mid) insert(i, id<<, L, mid, pos);
else insert(i, id<<|, mid+, R, pos);
_renew(i, id, L, R);
}
//SegT_2
int mx[MAX_N<<];
void _insert(int id, int L, int R, int pos, int val){
if(L==R){mx[id]=val; return;}
int mid=(L+R)>>;
if(pos<=mid) _insert(id<<, L, mid, pos, val);
else _insert(id<<|, mid+, R, pos, val);
mx[id]=max(mx[id<<], mx[id<<|]);
}
//
int main(){
freopen("in", "r", stdin);
int N, M, Q;
cin>>N>>M>>Q;
int a;
for(int i=; i<=N; i++){
for(int j=; j<=M; j++)
if(cin>>a, a) insert(i, , , M, j);
_insert(, , N, i, T[i][].ma);
}
int i, j;
while(Q--){
cin>>i>>j;
insert(i, , , M, j);
_insert(, , N, i, T[i][].ma);
cout<<mx[]<<endl;
}
return ;
}

甚至于我还在想能不能在不牺牲时间复杂度的情况下将树状数组改造成支持单点改的RMQ(不想写两个线段树~<^>~),但我真是SB了。这题暴力的复杂度O(q(n+m)) (读入复杂度O(nm)相比之下可忽略了), 1e6的量级,1s完全可过了(况且都说Codeforces的机器快~)。

-----------------------------------------------------------------------------------------------------------------------

写复杂的原因呢,就是我不熟悉求一个01串内最长连续“1”的长度朴素的解法应该怎么写(怎么可以连这都不知道呢~),最终踏上了线段树的歧途。

(×&^伤#¥%), 最要紧的还是要把一些基础姿势get到。

Codeforces 548B Mike and Fun的更多相关文章

  1. CodeForces 548B Mike and Fun (模拟)

    题意:给定一个n*m的矩阵,都是01矩阵,然后每次一个询问,改变一个格的值,然后问你最大有数是多少. 析:就是按他说的模拟,要预处理,只要把每行的最大值记下来,当改变时,再更新这一行的最大值. 代码如 ...

  2. hdu4135-Co-prime & Codeforces 547C Mike and Foam (容斥原理)

    hdu4135 求[L,R]范围内与N互质的数的个数. 分别求[1,L]和[1,R]和n互质的个数,求差. 利用容斥原理求解. 二进制枚举每一种质数的组合,奇加偶减. #include <bit ...

  3. codeforces 547E Mike and Friends

    codeforces 547E Mike and Friends 题意 题解 代码 #include<bits/stdc++.h> using namespace std; #define ...

  4. codeforces 689 Mike and Shortcuts(最短路)

    codeforces 689 Mike and Shortcuts(最短路) 原题 任意两点的距离是序号差,那么相邻点之间建边即可,同时加上题目提供的边 跑一遍dijkstra可得1点到每个点的最短路 ...

  5. (CodeForces 548B 暴力) Mike and Fun

    http://codeforces.com/problemset/problem/548/B Mike and some bears are playing a game just for fun. ...

  6. Codeforces 798D Mike and distribution - 贪心

    Mike has always been thinking about the harshness of social inequality. He's so obsessed with it tha ...

  7. Codeforces 798C. Mike and gcd problem 模拟构造 数组gcd大于1

    C. Mike and gcd problem time limit per test: 2 seconds memory limit per test: 256 megabytes input: s ...

  8. Codeforces 798A - Mike and palindrome

    A. Mike and palindrome time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  9. Codeforces 689C. Mike and Chocolate Thieves 二分

    C. Mike and Chocolate Thieves time limit per test:2 seconds memory limit per test:256 megabytes inpu ...

随机推荐

  1. HTML5和css3的总结三

    继续总结H5的新东西 1>序列化与反序列化 序列化:其实就是一个json->string的过程 JSON.stringify(json); 反序列化:string->json的过程( ...

  2. js对象深潜拷贝(从requirejs中抠出来的)

    var op = Object.prototype, ostring = op.toString, hasOwn = op.hasOwnProperty; function isFunction(it ...

  3. S2--《优化MySchool数据库设计》总结

    第一章    数据库的设计 1.1  数据库设计 数据库中创建的数据库结构的种类,以及在数据实体之间建立的复杂关系是决定数据库系统效率的重要因素. 糟糕的数据库设计表现在以下两个方面: *效率低下 * ...

  4. U5398 改数(num)

    U5398 改数(num) 5通过 28提交 题目提供者52zyz 标签 难度尚无评定 提交 最新讨论 暂时没有讨论 题目背景 又是一年NOIP,科学馆的五楼:“我们看下这道题,我们来模拟一下…2,3 ...

  5. [资料]Keychain 获取设备唯一

    BAIDU http://blog.csdn.net/wonengxing/article/details/42142595 http://www.cnblogs.com/max5945/archiv ...

  6. “插件(application/x-vlc-plugin)不受支持”NPAPI和PPAPI的问题

    “插件(application/x-vlc-plugin)不受支持”NPAPI和PPAPI的问题 最近做一个前端的项目,项目需要引用VLC浏览器插件,javascript在IE.Firefox等浏览器 ...

  7. sklearn分类

    近期的事务与sklearn有关,且主要用到了分类.在此做一点笔记 进行分类大概涉及三个知识点: 一. 分类器 二.特征选择 三.模型选择 一.分类器(Classification) 实例一:plot_ ...

  8. PC网站应用接入微信登录

    参考文档: https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&ve ...

  9. linux实践——ELF分析

    一.ELF的部分结构定义 elf header(定义在/usr/include/elf.h)//64位的系统ELF文件头包括以下两个部分 #define EI_NIDENT (16) typedef ...

  10. 对于AP中为什么有4个WEP KEY的分析

    这篇文章简要分析一下为什么有4个WEP KEY,及其中的一些原因. SPEC 用过AP的都知道,AP中有4个WEP KEY,但是为什么要设置4个呢,这个是WEP帧的格式决定的: 图中的keyid是2个 ...