#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
",T.query());
}
}
我一直以为过了这题我就能写得出来扫描线了...... 加油
(据说还有并查集的写法?)