RT,调了半天没调出来
代码:
#include<bits/stdc++.h>
#define int long long
#define mod (998244353)
#define inf (1e9)
using namespace std;
inline int read(){
int n=0,s=1;
char x;
while((x=getchar())<'0'||x>'9')
if(x=='-')
s=-1;
while(x>='0'&&x<='9'){
n=(n<<1)+(n<<3)+x-'0';
x=getchar();
}
return n*s;
}
void write(int n,char s=0){
if(n<0){
putchar('-');
n=-n;
}
if(n>9)write(n/10);
putchar('0'+n-n/10*10);
if(s)putchar(s);
}
int c[2000010][2];
inline int lowbit(int i){return i&-i;}
inline void add(int i,int x,bool flag){for(;i<=2000009;i+=lowbit(i))c[i][flag]+=x;}
inline int find(int i,bool flag){int ans=0;for(;i;i-=lowbit(i))ans+=c[i][flag];return ans;}
const int D=1000003;
int qwq[100001];
bool flag[100001];
bool mem[100001];
bool mem2[100001];
bool mem1[100001];
signed main(){
int aqx=read();
int qwqqwqqwq=0;
for(int i=1;i<=aqx;i++){
char op[10];
scanf("%s",op);
if(op[0]=='A'){
int a=read(),b=read(),c=read();
if(a==0){
mem[i]=1;
mem2[i]=(b>c);
qwqqwqqwq+=(b>c);
continue;
}
c-=b;
if(a>0){
int ans=(int)floor((long double)c/a)+1;
qwq[i]=ans;
if(abs(ans)>1000000)continue;
add(ans+D,1,0);
}
else {
a=-a;
c=-c;
int ans=-((int)floor((long double)c/a));
qwq[i]=ans;
flag[i]=1;
if(abs(ans)>1000000)continue;
add(ans+D,1,1);
}
}
if(op[0]=='Q'){
int k=read();
int ans=qwqqwqqwq;
ans+=find(k+D,0);
ans+=find((-k)+D,1);
write(ans,'\n');
}
if(op[0]=='D'){
int x=read();
if(mem1[x])continue;
mem1[x]=1;
if(mem[x]){
qwqqwqqwq-=mem2[x];
continue;
}
if(abs(qwq[x])>1000000)continue;
add(qwq[x]+D,-1,flag[x]);
}
}
return 0;
}