codevs1191 数轴染色

来源:互联网 发布:雷阿伦得分数据 编辑:程序博客网 时间:2024/04/28 02:41

这个加上lazy也没多大意义吧- -

#include<cstdio>#include<iostream>#include<cstring>#include<cstdlib>#include<algorithm>#include<string>#include<vector>#include<map>#include<set>#include<queue>#define R0(i,n) for(int i=0;i<n;++i)#define R1(i,n) for(int i=1;i<=n;++i)#define cl(x,c) memset(x,c,sizeof x)#define INF 0x7fffffffusing namespace std;typedef long long ll;int read(){    int x=0,f=1;char ch=getchar();    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}    return x*f;}int n,m;struct node{   int l,r,v,lazy;}tr[800001];void build(int k,int x,int y){tr[k].l=x;tr[k].r=y;if(x==y){tr[k].v=1;return;}int mid=(x+y)>>1;build(k<<1,x,mid);build(k<<1|1,mid+1,y);tr[k].v=tr[k<<1].v+tr[k<<1|1].v;}void change(int k,int x,int y){if(tr[k].v==0)return;int l=tr[k].l,r=tr[k].r;if(l==x&&r==y){tr[k].v=0;return;}int mid=(l+r)>>1;if(mid>=y)change(k<<1,x,y);else if(mid<x)change(k<<1|1,x,y);else {    change(k<<1,x,mid);    change(k<<1|1,mid+1,y);}tr[k].v=tr[k<<1].v+tr[k<<1|1].v;}int main(){int x,y;n=read(),m=read();build(1,1,n);R1(i,m){x=read(),y=read();change(1,x,y);printf("%d\n",tr[1].v);}return 0;}


0 0
原创粉丝点击