P1840 Color the Axis_NOI Guide 2011 increase (05)

#include<cstdio>
#define MAXN 200005

int n,m;

struct Segment_Tree{
    int c[MAXN<<2],tag[MAXN<<2];
    inline void build(int k,int l,int r){
        if(l==r){
            c[k]=1;
            return;
        }
        int mid=(l+r)>>1;
        build(k<<1,l,mid);
        build(k<<1|1,mid+1,r);
        c[k]=c[k<<1]+c[k<<1|1];
    }
    inline void pushdown(int k,int l,int r){
        if(!tag[k])return;
        int mid=(l+r)>>1;
        c[k<<1]=0;
        tag[k<<1]+=tag[k];
        c[k<<1|1]=0;
        tag[k<<1|1]+=tag[k];
        tag[k]=0;
    }
    inline void modify(int k,int l,int r,int xl,int xr){
        if(xl<=l&&r<=xr){
            c[k]=0;
            tag[k]++;
            return;
        }
        pushdown(k,l,r);
        int mid=(l+r)>>1;
        if(xl<=mid)modify(k<<1,l,mid,xl,xr);
        if(xr>=mid+1)modify(k<<1|1,mid+1,r,xl,xr);
        c[k]=c[k<<1]+c[k<<1|1];
    }
    inline int query(){
        pushdown(1,1,n);//亲测这一行不加也可以
        return c[1];
    }
}T;

int main(){
    scanf("%d%d",&n,&m);
    T.build(1,1,n);
    for(int i=1;i<=m;i++){
        int l,r;
        scanf("%d%d",&l,&r);
        T.modify(1,1,n,l,r);
        printf("%d\n",T.query());
    }
}

I always thought it had a problem I could write out a scan line ...... Come

Guess you like

Origin www.cnblogs.com/Y15BeTa/p/11791458.html