毒瘤题,注意下正数负数的取值就好了...

#include <bits/stdc++.h>
using namespace std;
const int N=2e6+5,M=10,base=1e6+1;
char s[M];int pos[N/10],sum[N],id,vis[N/10];
int lowbit(int x) { return x&(-x); }
void add(int pos,int val)
{
    while(pos<=N-1)
    {
       // if(f)   cout<<pos<<endl;
        sum[pos]+=val;
        pos+=lowbit(pos);
    }
}

int query(int pos)
{
    int res=0;
    while(pos)
    {
        res+=sum[pos];
        pos-=lowbit(pos);
    }
    return res;
}

int main()
{
    int T,x;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s",s+1);
        if(s[1]=='A')
        {
            int a,b,c;
            scanf("%d%d%d",&a,&b,&c);
            if(a>0)
            {
                x=(c-b)/a;
                if((c-b) > 0){
                    x ++;
                }
                else{
                    if((c - b) % a == 0) x ++;
                }
                if(x<-1000000)  x=1;
                else if(x>1000000)   x=2000000+4;
                else x+=base;
                add(x,1);
                pos[++id]=x;
            }
            else if(a==0)
            {
                if(b>c) x=1;
                else    x=2000000+4;
                add(x,1);
                pos[++id]=x;
            }
            else
            {
                x=(c-b)/a;
                if(c - b <= 0) {
                    if((c - b) % a == 0) x --;
                }
                else{
                    x --;
                }
                //cout<<x<<endl;
                if(x<-1000000)  //没贡献.
                {
                    x=2000000+4;
                    add(x,1);
                    pos[++id]=x;
                }
                else if(x>1000000)//都有贡献.
                {
                    x=1;
                    add(x,1);
                    pos[++id]=x;
                }
                else
                {
                    x+=base;
                    //cout<<x+1<<endl;
                    add(1,1);
                    //cout<<x+1<<endl;
                    add(x+1,-1);
                    pos[++id]=-x;
                }
            }
        }
        else if(s[1]=='D')
        {
            int i;
            scanf("%d",&i);
            if(vis[i]) continue;
            vis[i]=1;
            if(pos[i]>=0)   add(pos[i],-1);
            else            {  add(1,-1);add(-pos[i]+1,1); }
        }
        else
        {
            int k;
            k--;
            scanf("%d",&k);k+=base;
            printf("%d\n",query(k));
        }
    }
    return 0;
}