记录编号 |
343429 |
评测结果 |
AAAAAAAAAA |
题目名称 |
Color the Axis |
最终得分 |
100 |
用户昵称 |
Rapiz |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
4.776 s |
提交时间 |
2016-11-09 10:35:15 |
内存使用 |
6.39 MiB |
显示代码纯文本
- #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;
- }