m=2 的部分没问题。
m=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;
}