cin>>n>>m;
for(int i=1;i<=n;i++){
int x,y;
cin>>x>>y;
x++,y++;
p[i]=node{x,y,i,1};
maxx=max(maxx,x),maxy=max(maxy,y);
}
for(int i=1;i<=m;i++){
int k,x,y;
cin>>k>>x>>y;
cout<<i<<" "<<m;//这里在i==3时不能输出
x++,y++,n++;
p[n]=node{x,y,n,k&1};
maxx=max(maxx,x),maxy=max(maxy,y);
}
cout<<n;//这里不能输出
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+6;
int n,maxx,maxy,ans[N],ox,oy,m;
struct node{
int x,y,t,f;
bool operator < (const node &a)const{
return x<=a.x;
}
}p[N],q[N],a[N];
void del(){
ox=oy=m=0;
for(int i=1;i<=n;i++){
if(!p[i].f)ox=max(ox,p[i].x),oy=max(oy,p[i].y);
}
for(int i=1;i<=n;i++){
if(p[i].x<=ox&&p[i].y<=oy)q[++m]=p[i];
}
for(int i=1;i<=m;i++)p[i]=q[i];
}
int c[N];
int lowbit(int x){return x&-x;}
void add(int x,int d){
for(;x<=maxy;x+=lowbit(x))c[x]=max(c[x],d);
}
int query(int x){
int res=0;
for(;x;x-=lowbit(x))res=max(res,c[x]);
return res;
}
void clear(int x){
for(;x<=maxy;x+=lowbit(x))c[x]=0;
}
void cdq(int l,int r){
if(l==r)return;
int mid=(l+r)>>1;
cdq(l,mid),cdq(mid+1,r);
int i=mid+1,j=l;
while(i<=r){
if(!p[i].f){
while(j<=mid&&p[j].x<=p[i].x){
if(p[j].f)add(p[j].y,p[j].x+p[j].y);
}
int tmp=query(p[i].y);
if(tmp)ans[p[i].t]=min(ans[p[i].t],p[i].x+p[i].y-tmp);
}
}
for(int i=l;i<j;i++)if(p[i].f)clear(p[i].y);
merge(p+l,p+mid+1,p+mid+1,p+r+1,q+l);
for(int i=l;i<=r;i++)p[i]=q[i];
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
int x,y;
cin>>x>>y;
x++,y++;
p[i]=node{x,y,i,1};
maxx=max(maxx,x),maxy=max(maxy,y);
}
for(int i=1;i<=m;i++){
int k,x,y;
cin>>k>>x>>y;
cout<<i<<" "<<m;
x++,y++,n++;
p[n]=node{x,y,n,k&1};
maxx=max(maxx,x),maxy=max(maxy,y);
}
cout<<n;
for(int i=1;i<=n;i++){a[i]=p[i];cout<<1;}
memset(ans,0x3f3f3f3f,sizeof(ans));
maxx++,maxy++;
del(),cdq(1,m);
for(int i=1;i<=n;i++)p[i]=a[i],p[i].y=maxy-p[i].y;
del(),cdq(1,m);
for(int i=1;i<=n;i++)p[i]=a[i],p[i].x=maxx-p[i].x;
del(),cdq(1,m);
for(int i=1;i<=n;i++)p[i]=a[i],p[i].x=maxx-p[i].x,p[i].y=maxy-p[i].y;
del(),cdq(1,m);
for(int i=1;i<=n;i++){
if(!a[i].f)cout<<ans[i]<<endl;
}
return 0;
}
完整代码