题目是这样的:
有一天,小L路过一个摊铺。 老板拿着一本书,说:“年轻人,我看你骨骼清奇,如果你能回答我多年的一个疑问,这本书就送你了。”小L虽疑心他是个骗子,但还是回答了他的问题。 问题是这样的:有一个袋子和一些球,每个球上有一个数,老板准备往袋子里扔球或者拿球,还要求摘要和,操作可以这样表示:
1、把一个标着数字 x的球扔进袋子 (add x)
2、把一个标着数字 x的球从袋子里拿出(del x)
3、求袋子中球的摘要和(sum)
袋子中球的摘要和的定义:假设袋子中的球按照标着的数从小到大排序后标着的数是 a1,a2,...,ak,摘要和 =所有ai的和(i≡3(mod5))。
第一行,是一个整数 N,表示操作的数量。后续的 N 行,每行是 “add x”、“del x”、“sum” 中的一种,参见样例。你可以假设,对于 “add x”,标着x的球不在当前集合中,对于 “del x”,标着x的球一定在当前集合中。
对于每一个 sum 操作,输出一行,一个整数,表示摘要和。如果袋子里没有球,输出 0。
9
add 1
add 2
add 3
add 4
add 5
sum
add 6
del 3
sum
3
4
提示 1<=N<=105,1<=x<=109
下面是错误代码:
#include<iostream>
#include<cstdio>
#include<map>
#include<queue>
#define MAXN 100005
using namespace std;
int n,k,i,j;
int q[MAXN];
map<int,int> b;
int main(){
//freopen("caozuodaizi.in","r",stdin);
//freopen("caozuodaizi.out","w",stdout);
cin>>n;
for(i=1;i<=n;i++){
string s;
int a;
cin>>s;
if(s=="add"){
cin>>a;
b[a]=++k;
q[k]=a;
}else if(s=="del"){
cin>>a;
int pos=b[a];
for(j=pos;j<k;j++){
b[q[j]]=b[q[j+1]]-1;
q[j]=q[j+1];
}
k--;
}else{
long long ans=0;
for(j=3;j<=k;j+=5)
ans+=q[j];
cout<<ans<<"\n";
}
}
return 0;
}
求正解或找错