#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct pairs{
ll num,sum;
}a[100010];
int best=1;
int half_search(int l,int r,ll x){
if(l>r)return best;
int mid=(r-l)/2+l;
if(a[mid].num==x)
return mid;
if(a[mid].num<x)
best=mid+1;
return half_search(l,mid-1,x);
if(a[mid].num>x){
return half_search(mid+1,r,x);
}
}
ll max(ll x,int y){
return x>=y?x:y;
}
int main(){
int n;scanf("%d",&n);
int op,tot=0;
ll x,y;
for(int i=1;i<=n;i++){
scanf("%d",&op);
if(op==1){
scanf("%lld%lld",&x,&y);
int node=half_search(1,tot,x);
if(a[node].num==x)a[node].sum+=y;
else{
//printf("node=%d\n",node);
for(int j=tot;j>=node;j--){
a[j+1].num=a[j].num;
a[j+1].sum=a[j].sum;
}
tot++;
a[node].num=x;a[node].sum=y;
}
}else if(op==2){
scanf("%lld%lld",&x,&y);
int node=half_search(1,tot,x);
if(a[node].num==x)a[node].sum=max(a[node].sum-y,0);
}else if(op==3){
for(int i=1;i<=tot;i++)
if(a[i].sum!=0)
a[i].sum=1;
}else{
scanf("%lld",&x);
int node=half_search(1,tot,x);
if(a[node].num==x)printf("%lld\n",a[node].sum);
else printf("0\n");
}
//printf("tot=%d\n",tot);
//for(int i=1;i<=tot;i++)
// printf("num%d=%d sum%d=%d\n",i,a[i].num,i,a[i].sum);
}
return 0;
}
3个AC,n个WA,5个TLE。 求救大佬。