
玄关求卡常,另问为什么会被卡
#include<bits/stdc++.h>
#pragma GCC optimize(2)
#define ls(x) (lson[x]?lson[x]:lson[x]=++cnt)
#define rs(x) (rson[x]?rson[x]:rson[x]=++cnt)
using namespace std;
int t[15000010],lson[15000010],tag[15000010],rson[15000010],cnt=1;
void pushup(int x){
t[x]=t[ls(x)]+t[rs(x)];
// cout<<x<<' '<<ls(x)<<' '<<rs(x)<<' '<<t[ls(x)]<<' '<<t[rs(x)]<<' '<<t[x]<<endl;
}
void pushdown(int fa,int l,int r){
// cout<<"pushdown:"<<tag[fa]<<endl;
if(tag[fa]==-1)return;
// cout<<fa<<endl;
int mid=(l+r)>>1;
tag[ls(fa)]=tag[fa];
t[ls(fa)]=(mid-l+1)*tag[fa];
tag[rs(fa)]=tag[fa];
t[rs(fa)]=(r-mid)*tag[fa];
tag[fa]=-1;
return;
}
int query(int l,int r,int L,int R,int fa){
// cout<<"query:"<<L<<' '<<R<<' '<<fa<<' '<<t[fa]<<endl;
if(L>=l&&R<=r){
return t[fa];
}
pushdown(fa,L,R);
int mid=(L+R)>>1,ans=0;
if(l<=mid)ans+=query(l,r,L,mid,ls(fa));
if(r>mid)ans+=query(l,r,mid+1,R,rs(fa));
return ans;
}
void update(int l,int r,int L,int R,int fa,int op){
// cout<<"update:"<<L<<' '<<R<<' '<<fa<<' '<<op;
if(L>=l&&R<=r){
t[fa]=(R-L+1)*op;
tag[fa]=op;
// cout<<t[fa]<<endl;
return;
}
// cout<<endl;
pushdown(fa,L,R);
int mid=(L+R)>>1,ans=0;
if(l<=mid)update(l,r,L,mid,ls(fa),op);
if(r>mid)update(l,r,mid+1,R,rs(fa),op);
pushup(fa);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int n,q;
cin>>n>>q;
fill(tag,tag+int(1.5e7)+1,-1);
for(int i=1;i<=q;i++){
int x,y,k;
cin>>x>>y>>k;
update(x,y,1,n,1,(k==2?0:1));
cout<<n-query(1,n,1,n,1)<<'\n';
}
return 0;
}