比赛 [不是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;
}