http://codeforces.com/problemset/problem/669/E
动态主席树模板题
CDQ分治也可以做 转换为三位偏序 初始给定顺序为第一维 t值为第二维 x值为第三维 代码略
using namespace std;
struct node1
{
    int tp;
    int t;
    int x;
};
struct node2
{
    int l;
    int r;
    int val;
};
node1 order[100010];
node2 tree[10000010];
int pret[100010],prex[100010],root[100010];
int q,lent,lenx,num;
int lowbit(int x)
{
    return x&(-x);
}
int build(int l,int r)
{
    int cur,m;
    cur=num++;
    if(l==r) return cur;
    m=(l+r)/2;
    tree[cur].l=build(l,m);
    tree[cur].r=build(m+1,r);
    return cur;
}
int updateII(int rot,int tar,int val,int l,int r)
{
    int cur,m;
    cur=num++;
    tree[cur]=tree[rot];
    tree[cur].val+=val;
    if(l==r) return cur;
    m=(l+r)/2;
    if(tar<=m) tree[cur].l=updateII(tree[rot].l,tar,val,l,m);
    else tree[cur].r=updateII(tree[rot].r,tar,val,m+1,r);
    return cur;
}
void updateI(int tart,int tarx,int val)
{
    int i;
    for(i=tart;i<=lent;i+=lowbit(i)) root[i]=updateII(root[i],tarx,val,1,lenx);
}
int queryII(int rot,int tar,int l,int r)
{
    int m;
    if(l==r) return tree[rot].val;
    m=(l+r)/2;
    if(tar<=m) return queryII(tree[rot].l,tar,l,m);
    else return queryII(tree[rot].r,tar,m+1,r);
}
int queryI(int tart,int tarx)
{
    int res,i;
    res=0;
    for(i=tart;i>=1;i-=lowbit(i)) res+=queryII(root[i],tarx,1,lenx);
    return res;
}
int main()
{
    int i,pt,px;
    scanf("%d",&q);
    for(i=1;i<=q;i++)
    {
        scanf("%d%d%d",&order[i].tp,&order[i].t,&order[i].x);
        pret[++lent]=order[i].t;
        prex[++lenx]=order[i].x;
    }
    sort(pret+1,pret+lent+1);
    sort(prex+1,prex+lenx+1);
    lent=unique(pret+1,pret+lent+1)-pret-1;
    lenx=unique(prex+1,prex+lenx+1)-prex-1;
    root[0]=build(1,lenx);
    for(i=1;i<=lent;i++) root[i]=root[0];
    for(i=1;i<=q;i++)
    {
        pt=lower_bound(pret+1,pret+lent+1,order[i].t)-pret;
        px=lower_bound(prex+1,prex+lenx+1,order[i].x)-prex;
        if(order[i].tp==1) updateI(pt,px,1);
        else if(order[i].tp==2) updateI(pt,px,-1);
        else printf("%d\n",queryI(pt,px));
    }
    return 0;
}
                










