比赛 |
[不是Rapiz出的]农场主钦定NOIP模拟赛1 |
评测结果 |
AAAAAAAAAA |
题目名称 |
Color the Axis |
最终得分 |
100 |
用户昵称 |
Rapiz |
运行时间 |
5.175 s |
代码语言 |
C++ |
内存使用 |
5.75 MiB |
提交时间 |
2016-11-08 21:55:44 |
显示代码纯文本
#include<cstdio>
#define mid (l + r >> 1)
#define lch (o << 1)
#define rch (o << 1 | 1)
#define file(x) "axis."#x
const int N = 2e5+10;
int n,m,s[N << 2],w[N << 2];
int build(int o,int l,int r) {
if(l > r) return 0;
else if(l == r) return s[o] = 1;
else return s[o] = build(lch,l,mid) + build(rch,mid + 1,r);
}
inline void mkw(int o,int l,int r){
s[o] = 0;
w[o] = 1;
}
void down(int o,int l,int r) {
if (!w[o]) return;
mkw(lch,l,mid),mkw(rch,mid + 1,r);
w[o] = 0;
}
inline void up(int o) {
s[o] = s[lch] + s[rch];
}
int q1,q2;
void modi(int o,int l,int r){
if(q1 <= l && r <= q2) {
mkw(o,l,r);
return;
}
down(o,l,r);
if(q1 <= mid) modi(lch,l,mid);
if(q2 > mid) modi(rch,mid + 1,r);
up(o);
}
inline int query(){
down(1,1,n);
return s[1];
}
int main(){
freopen(file(in),"r",stdin);
freopen(file(out),"w",stdout);
scanf("%d%d",&n,&m);
build(1,1,n);
while (m--) {
scanf("%d%d",&q1,&q2);
modi(1,1,n);
printf("%d\n",query());
}
return 0;
}