可爱线段树求条(玄关
查看原帖
可爱线段树求条(玄关
1016188
fztt_r9楼主2024/10/21 19:37
#include<bits/stdc++.h>
#define ls (now<<1)
#define rs ((now<<1)|1)
#define mid ((l+r)>>1)
#define maxn 500005
using namespace std;
struct tre{int mx,lmx,rmx,siz,lazy;}tree[maxn<<5];
inline void pd(int now){
	if(!tree[now].lazy) return;
	tree[ls].lazy=tree[rs].lazy=tree[now].lazy;
	if(tree[now].lazy=1){
		tree[rs].mx=tree[rs].lmx=tree[rs].rmx=tree[rs].siz;
		tree[ls].mx=tree[ls].lmx=tree[ls].rmx=tree[ls].siz;
	}else{
		tree[rs].mx=tree[rs].lmx=tree[rs].rmx=0;
		tree[ls].mx=tree[ls].lmx=tree[ls].rmx=0;
	}
	tree[now].lazy=0;
}
inline void up(int now){
	tree[now].siz=tree[ls].siz+tree[rs].siz;
	tree[now].mx=max(tree[ls].mx,max(tree[rs].mx,tree[ls].rmx+tree[rs].lmx));
	
	if(tree[ls].siz==tree[ls].mx) tree[now].lmx=tree[ls].siz+tree[rs].lmx;
	else tree[now].lmx=tree[ls].lmx;
	
	if(tree[rs].siz==tree[rs].mx) tree[now].rmx=tree[rs].siz+tree[ls].rmx;
	else tree[now].rmx=tree[rs].rmx;
}
void modify(int now,int l,int r,int L,int R,int val){
//	cout<<now<<' ';
	if(l>=L&&r<=R){
		tree[now].lazy=val;
		if(val==1){
			tree[now].lmx=tree[now].rmx=tree[now].mx=tree[now].siz;
		}else{
			tree[now].lmx=tree[now].rmx=tree[now].mx=0;
		}
		return;
	}
	pd(now);
	if(L<=mid) modify(ls,l,mid,L,R,val);
	if(R>mid) modify(rs,mid+1,r,L,R,val);
	up(now);
}
int query(int now,int l,int r,int len){
	if(l==r) return l;
	pd(now);
	if(tree[ls].siz>=len) return query(ls,l,mid,len);
	if(tree[rs].lmx+tree[ls].rmx>=len) return mid-tree[ls].rmx+1;
	if(tree[rs].mx>=len) return query(rs,mid+1,r,len);
}
void build(int now,int l,int r){
	if(l==r) {
		tree[now].lazy=0;tree[now].siz=tree[now].rmx=tree[now].lmx=tree[now].mx=1;
		return;
	}
	build(ls,l,mid);
	build(rs,mid+1,r);
	up(now);
}
int main(){
	int ans=0,n,q;
	cin>>n>>q;
	build(1,1,n);
	while(q--){
		cout<<tree[1].mx<<endl;
		char opt;cin>>opt;
		if(opt=='A'){
			int x;cin>>x;
			if(tree[1].mx>=x){
				int l=query(1,1,n,x);
				modify(1,1,n,l,l+x-1,2);
			}else ans++; 
		}else{
			int l,r;cin>>l>>r;
			modify(1,1,n,l,r,1);
		} 
	}
	cout<<ans<<endl;
}
2024/10/21 19:37
加载中...