。。。#1 ac 其余wa 求帮忙
查看原帖
。。。#1 ac 其余wa 求帮忙
542905
WannaYellow楼主2022/7/19 13:15
#include<iostream>
using namespace std;
int n,m;
struct SegTree{
	#define mid ((l+r)>>1)
	struct Node{
		int lran,rran,maxran,len;
	}nod[50005<<2];
	int t[50005<<2];
	inline int ls(int x){return x<<1;}
	inline int rs(int x){return x<<1|1;}
	void build(int x,int l,int r){
		nod[x].len=nod[x].lran=nod[x].rran=nod[x].maxran=r-l+1;
		t[x]=2;
		if(r==l)return;
		build(ls(x),l,mid);
		build(rs(x),mid+1,r);
	}
	void update(int x,int l,int r){
		nod[x].maxran=max(max(nod[ls(x)].maxran,nod[rs(x)].maxran),nod[ls(x)].rran+nod[rs(x)].lran);
		nod[x].lran=nod[ls(x)].lran+((nod[ls(x)].maxran==(nod[ls(x)].len))?nod[rs(x)].lran:0);
		nod[x].rran=nod[rs(x)].rran+((nod[rs(x)].maxran==(nod[rs(x)].len))?nod[ls(x)].rran:0);
	}
	void modi(int x,int l,int r,int k){
		if(k==0){
			t[x]=0;
			nod[x].lran=nod[x].rran=nod[x].maxran=r-l+1;
		}
		else if(k==1){
			t[x]=1;
			nod[x].lran=nod[x].rran=nod[x].maxran=0;
		}
	}
	void push_down(int x,int l,int r){
		if(t[x]!=2){
			modi(ls(x),l,mid,t[x]);
			modi(rs(x),mid+1,r,t[x]);
			t[x]=2;
		}
	}
	void modify(int x,int l,int r,int ml,int mr,int k){
		if(ml<=l&&r<=mr){
			modi(x,l,r,k);
			return;
		}
		push_down(x,l,r);
		if(ml<=mid)modify(ls(x),l,mid,ml,mr,k);
		if(mr>mid)modify(rs(x),mid+1,r,ml,mr,k);
		update(x,l,r);
	}
	int query(int x,int l,int r,int len){
		if(len>nod[x].maxran)return 0;
		if(l==r)return l;
		push_down(x,l,r);
		if(nod[ls(x)].maxran>=len)return query(ls(x),l,mid,len);
		if(nod[ls(x)].rran+nod[rs(x)].lran>=len) return mid-nod[ls(x)].rran+1;
		if(nod[rs(x)].maxran>=len)return query(rs(x),mid+1,r,len);
		return 0;
	}	
}T;
int ru(int len){
	int t=T.query(1,1,n,len);
	if(t!=0)T.modify(1,1,n,t,t+len-1,1);
	return t;
}
int chu(int l,int len){
	T.modify(1,1,n,l,l+len-1,0);
}
int main(){
	cin>>n>>m;
	T.build(1,1,n);
	for(int i=1;i<=m;i++){
		int opt;
		cin>>opt;
		if(opt==1){
			int x;
			cin>>x;
			cout<<ru(x)<<"\n";
		}
		else {
			int l,r;
			cin>>l>>r;
			chu(l,r);
		}
	}
	return 0;
}
2022/7/19 13:15
加载中...