求调
查看原帖
求调
350558
_wsq_楼主2025/6/30 20:11

m=2m=2 的部分没问题。

m=1m=1 的部分,目前样例能过,其他点全在 99x 或 999x 的位置寄了,提示 can't be removed。

#include<iostream>
#include<cstring>
#include<set>
#include<algorithm>
using namespace std;
#define maxn 100005
#define inf 0x3f3f3f3f
#define ls (rt<<1)
#define rs ((rt<<1)|1)
#define mid ((l+r)>>1)
#ifdef _STL_COMPILER_PREPROCESSOR
int n,m,x1[maxn],y1_[maxn],x2[maxn],y2[maxn],c[maxn<<1],ans[maxn];
#else
int n,m,x1[maxn],y1[maxn],x2[maxn],y2[maxn],c[maxn<<1],ans[maxn];
#endif
bool e[maxn];
pair<int,int> num[maxn<<3];
set<pair<int,int> > s[maxn<<1];
namespace szsz{
	int lowbit(int x){
		return x&-x;
	}
	void change(int x,int k){
		while(x<=(n<<1)){
			c[x]=min(c[x],k);
			x+=lowbit(x);
		}
		return;
	}
	int get(int x){
		int ret=0x3f3f3f3f;
		while(x){
			ret=min(ret,c[x]);
			x-=lowbit(x);
		}
		return ret;
	}
}
namespace xds{
	void build(int l,int r,int rt){
		if(l==r){
			num[rt]=*(s[l].begin());
			return;
		}
		build(l,mid,ls);
		build(mid+1,r,rs);
		num[rt]=min(num[ls],num[rs]);
		return;
	}
	pair<int,int> get(int x,int l,int r,int rt){
		if(!x){
			return make_pair(inf,inf);
		}
		if(r<=x){
			return num[rt];
		}
		pair<int,int> ret=get(x,l,mid,ls);
		if(mid<x){
			ret=min(ret,get(x,mid+1,r,rs));
		}
		return ret;
	}
	void del(int x);
	void del1(int x,int l,int r,int rt){
		if(l==x1[x]&&r==x1[x]){
#ifdef _STL_COMPILER_PREPROCESSOR
			s[l].erase(make_pair(y1_[x],x));
#else
			s[l].erase(make_pair(y1[x],x));
#endif
			num[rt]=*(s[l].begin());
			return;
		}
		if(mid<x1[x]){
			del1(x,mid+1,r,rs);
		}
		else{
			del1(x,l,mid,ls);
		}
		num[rt]=min(num[ls],num[rs]);
		return;
	}
	void del2(int x,int l,int r,int rt){
		pair<int,int> cnt=get(x2[x]-1,1,n<<1,1);
		if(cnt.first<y2[x]){
			del(cnt.second);
		}
		e[x]=true;
		cout<<x<<' ';
		return;
	}
	void del(int x){
		del1(x,1,n<<1,1);
		del2(x,1,n<<1,1);
	}
}
int main(){
	int t;
	cin>>t>>m;
	while(t--){
		cin>>n;
		for(int i=1;i<=n;i++){
#ifdef _STL_COMPILER_PREPROCESSOR
			cin>>x1[i]>>y1_[i]>>x2[i]>>y2[i];
#else
			cin>>x1[i]>>y1[i]>>x2[i]>>y2[i];
#endif
		}
		if(m==2){
			memset(c,0x3f,sizeof(c));
			for(int i=n;i;i--){
				ans[i]=szsz::get(x2[i])>=y2[i];
#ifdef _STL_COMPILER_PREPROCESSOR
				szsz::change(x1[i],y1_[i]);
#else
				szsz::change(x1[i],y1[i]);
#endif
			}
			for(int i=1;i<=n;i++){
				cout<<ans[i];
			}
		}
		else{
			memset(e,false,sizeof(e));
			for(int i=1;i<=(n<<1);i++){
				s[i].clear();
				s[i].insert(make_pair(inf,inf));
			}
			for(int i=1;i<=n;i++){
#ifdef _STL_COMPILER_PREPROCESSOR
				s[x1[i]].insert(make_pair(y1_[i],i));
#else
				s[x1[i]].insert(make_pair(y1[i],i));
#endif
			}
			xds::build(1,n<<1,1);
			for(int i=1;i<=n;i++){
				if(!e[i]){
					xds::del(i);
				}
			}
		}
		cout<<'\n';
	}
	return 0;
}
2025/6/30 20:11
加载中...