rt。AC #1,#2 到 #5 都显示 wrong answer On line 4 column 1, read 1, expected 0.
#include <bits/stdc++.h>
//#define int long long
#define Rg register
#define Ri Rg int
#define Il inline
#define vec vector
#define pb push_back
#define fi first
#define se second
#define IT ::iterator
using namespace std;
typedef double db;
typedef pair<int,int> pii;
const int N=2e5,Inf=1e9,mod=1e6+3;
const db eps=1e-9,alp=0.75;
int n;
int W,id=0,rt,ls[N+5],rs[N+5],sz[N+5],sl[N+5][2],sr[N+5][2],sm[N+5];
int gn,kg[N+5];
struct Kode{int ps[2],nm;}dx[N+5];
#define bad(p) (sz[ls[p]]>=alp*sz[p]||sz[rs[p]]>=alp*sz[p])
Il bool cmp(int x,int y){return dx[x].ps[W]<dx[y].ps[W];}
Il void pup(int p){
sz[p]=sz[ls[p]]+sz[rs[p]]+1;
sm[p]=sm[ls[p]]+sm[rs[p]]+dx[p].nm;
for(Ri i=0;i<2;i++){
sl[p][i]=dx[p].ps[i],sr[p][i]=dx[p].ps[i];
if(ls[p])sl[p][i]=min(sl[p][i],sl[ls[p]][i]);
if(rs[p])sr[p][i]=max(sr[p][i],sr[rs[p]][i]);
}
return;
}
Il void flat(int p){
if(!p)return;
flat(ls[p]);
kg[++gn]=p;
flat(rs[p]);
return;
}
Il int make(int l,int r,int w){
if(l>r)return 0;
int mid=(l+r)>>1;W=w;
nth_element(kg+l,kg+mid,kg+r+1,cmp);
if(l==r)ls[kg[mid]]=rs[kg[mid]]=0;
else ls[kg[mid]]=make(l,mid-1,w^1),rs[kg[mid]]=make(mid+1,r,w^1);
pup(kg[mid]);
return kg[mid];
}
Il void rbuild(int &p){
gn=0;flat(p);
p=make(1,gn,0);
return;
}
Il void ins(int &p,Kode x,int w){
if(!p)dx[p=++id]=x;
else{
if(x.ps[w]<dx[p].ps[w])ins(ls[p],x,w^1);
else ins(rs[p],x,w^1);
}
pup(p);if(bad(p))rbuild(p);
return;
}
Il bool inq(int qa,int qb,int qc,int qd,int na,int nb,int nc,int nd){return (qa<=na&&nc<=qc&&qb<=nb&&nd<=qd);}
Il bool ouq(int qa,int qb,int qc,int qd,int na,int nb,int nc,int nd){return (qa>na||nc>qc||qb>nb||nd>qd);}
Il int qsq(int ql0,int qr0,int ql1,int qr1,int p){
if(!p||ouq(ql0,qr0,ql1,qr1,sl[p][0],sr[p][0],sl[p][1],sr[p][1]))return 0;
if(inq(ql0,qr0,ql1,qr1,sl[p][0],sr[p][0],sl[p][1],sr[p][1]))return sm[p];
int ret=0;
if(inq(ql0,qr0,ql1,qr1,dx[p].ps[0],dx[p].ps[1],dx[p].ps[0],dx[p].ps[1]))ret=dx[p].nm;
ret+=qsq(ql0,qr0,ql1,qr1,ls[p])+qsq(ql0,qr0,ql1,qr1,rs[p]);
return ret;
}
#undef bad
signed main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n;int op,lans=0;
while(cin>>op){
if(op==3)break;
int xa,ya,xb,yb;
if(op==1){
cin>>xa>>ya>>xb;
xa^=lans,ya^=lans,xb^=lans;
ins(rt,{{xa,ya},xb},0);
}else{
cin>>xa>>ya>>xb>>yb;
xa^=lans,ya^=lans,xb^=lans,yb^=lans;
lans=qsq(xa,ya,xb,yb,rt);cout<<lans<<'\n';
}
}
return 0;
}