WA on #3 #4
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
struct node {
int x,y;
}a[1000005];
int read(){
int x=0;char ch=getchar();
while(ch>'9'||ch<'0')ch=getchar();
while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return x;
}
vector<int>mem;
bool cmp(node aa,node bb){
return aa.x==bb.x?(aa.y<bb.y):(aa.x<bb.x);
}
signed main(){
n=read();
for(int i=1;i<=n;i++)a[i].x=read(),a[i].y=read();
m=read();
int ty,cx,cy;
for(int l=1;l<=m;l++){
ty=read(),cx=read(),cy=read();
if(ty==1){
a[++n].x=cx,a[n].y=cy;
sort(a+1,a+n+1,cmp);
}else if(ty==2){
int l=1,r=n,mid,mem;
for(int i=1;i<=n;i++){
if(a[i].x==cx&&a[i].y==cy)mid=i;
}
a[mid].x=0x7fffffff,a[mid].y=0x7fffffff;
sort(a+1,a+n+1,cmp);
--n;
}else {
mem.clear();
for(int i=1;i<=n;i++){
if(a[i].x<cx&&a[i].y<cy){mem.push_back(i);continue;}
if(a[i].x>=cx&&a[i].y>=cy)break;
}
int ans=0;
for(int i=0;i<mem.size();i++){
int ji=mem[i];
for(int j=0;j<mem.size();j++){
if((a[ji].x==a[mem[j]].x&&a[ji].y!=a[mem[j]].y)||(a[mem[j]].y==a[ji].y&&a[ji].x!=a[mem[j]].x)||(a[ji].x>a[mem[j]].x&&a[ji].y<a[mem[j]].y)||(a[ji].x<a[mem[j]].x&&a[ji].y>a[mem[j]].y))
++ans;
}
}
printf("%d\n",ans/2);
}
}
}