[codevs1191]数轴染色

来源:互联网 发布:热血传奇王者辅助源码 编辑:程序博客网 时间:2024/04/27 22:46

题目:

我是超链接

题解:

flag[i]表示是否被完全染色

代码:

#include <cstdio>#include <iostream>#include <cstring>#define N 5000000using namespace std;bool flag[N*4+5],delta[N*4+5];void updata(int now)//flag[i]==true 全是白的{flag[now]=flag[now<<1]&&flag[now<<1|1];}void pushdown(int now){if (delta[now]){delta[now<<1]=true;delta[now<<1|1]=true;delta[now]=0;flag[now<<1]=true;flag[now<<1|1]=true;}}void change(int now,int l,int r,int lrange,int rrange){pushdown(now);if (lrange<=l && rrange>=r){flag[now]=true;delta[now]=true;return;}int mid=(l+r)>>1;if (mid>=lrange)  change(now<<1,l,mid,lrange,rrange);if (mid<rrange)  change(now<<1|1,mid+1,r,lrange,rrange);updata(now);}int qurry(int now,int l,int r,int lrange,int rrange){    pushdown(now);if (l>=lrange && rrange>=r && flag[now]) return r-l+1;if (l==r) return flag[now];int mid=(l+r)>>1,ans=0;if (mid>=lrange)  ans+=qurry(now<<1,l,mid,lrange,rrange);if (mid<rrange)  ans+=qurry(now<<1|1,mid+1,r,lrange,rrange);return ans;}int main(){int n,m,i,a,b;scanf("%d%d",&n,&m);for (i=1;i<=m;i++){scanf("%d%d",&a,&b);change(1,1,n,a,b);printf("%d\n",n-qurry(1,1,n,1,n));}  }


0 0
原创粉丝点击