线段树
20+30+68(2/6) -> 100+30+68(1/6)
T1线段树+二分板子,由于还有很多人也改出来了就把代码放了吧
#include
using namespace std;
long long t[400050],a[100005],lazy[400050],n,m,b,c,d,e,ll,rr,al,ar,mid;
long long lowbit(long long x){return x&-x;}
void add(long long k,long long l,long long r,long long v){
lazy[k]=v;
t[k]=v*(r-l+1);
}
void pd(long long k,long long l,long long r,long long m){
if(lazy[k]==-1){return;}
if(l==r){return;}
add(k*2,l,m,lazy[k]);
add(k*2+1,m+1,r,lazy[k]);
lazy[k]=-1;
}
long long sum(long long k,long long l,long long r,long long x,long long y){
if(x=r){
return t[k];
}
long long m=(l+r)/2,ans=0;
pd(k,l,r,m);
if(xm) ans+=sum(k*2+1,m+1,r,x,y);
return ans;
}
void cge(long long k,long long l,long long r,long long x,long long y,long long v){
if(x=r){add(k,l,r,v);return;}
long long m=(l+r)/2;
pd(k,l,r,m);
if(xm) cge(k*2+1,m+1,r,x,y,v);
t[k]=t[k*2]+t[k*2+1];
}
int main(){
freopen("explore.in","r",stdin);
freopen("explore.out","w",stdout);
cin>>n>>m;
memset(lazy,0,sizeof(lazy));
for(int i=1;i>b;
if(b==1){
cin>>c>>d;
cge(1,1,n,c,d,1);
}else if(b==2){
cin>>c>>d;
cge(1,1,n,c,d,0);
}else{
cin>>c;
if(sum(1,1,n,1,c)==0){cout<<"INF\n";continue;}
if(sum(1,1,n,c,n)==0){cout<0){cout<<"0\n";continue;}
ll=1;rr=c;
while(ll<rr){
mid=(ll+rr+1)/2;
if(sum(1,1,n,mid,c)==0){
al=mid;rr=mid-1;
}else{ll=mid;}
}
ll=c;rr=n;
while(ll<rr){
mid=(ll+rr)/2;
if(sum(1,1,n,c,mid)==0){
ar=mid;ll=mid+1;
}else{rr=mid;}
}
//cout<<ar<<' '<<al<<endl;
cout<<ar-al+1<<endl;
}
}
return 0;
}
LCA和倍增
19+44+0(1/2)
是的我们只有2个人交了(我和wwh)
听不懂
下班