#include using namespace std; const int N=1e5+10; #define mid (l+r)/2 int n,m; struct node{ int a,b,id; }c[N]; bool cmp(node x,node y){ if(x.a==y.a) return x.by.a; } struct tree{ int sum[N<<2][2]; inline void pushup(int u,int id){ sum[u][id]=sum[u<<1][id]+sum[u<<1|1][id]; } void update(int u,int l,int r,int x,int d,int id){ if(l==r){ sum[u][id]+=d; return; } if(x<=mid) update(u<<1,l,mid,x,d,id); else update(u<<1|1,mid+1,r,x,d,id); pushup(u,id); return; } int query(int u,int l,int r,int k,int id){//kth biggest if(l==r) return l; if(sum[u<<1|1][id]>=k) return query(u<<1|1,mid+1,r,k,id); return query(u<<1,l,mid,k-sum[u<<1|1][id],id); } int query(int u,int l,int r,int ql,int qr,int id){ if(ql<=l&&r<=qr) return sum[u][id]; if(qr>n>>m; for(int i=1;i<=n;i++){ cin>>c[i].id>>c[i].a>>c[i].b; x[c[i].id].add(c[i]); } sort(c+1,c+1+n,cmp); calc(); for(int i=1;i<=n;i++){ if(c[i].id<3){ x[c[i].id].del(c[i]); x[c[i].id+1].add(c[i]); } if(c[i].a!=c[i+1].a) calc(); } calc(); cout<