#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
int n;
vector<int>num;//动态的数组
int main()
{
while(scanf("%d",&n)!=EOF)
{
num.clear();
int len=0;
vector<int>::iterator it;
int aa;
char op[10];
while(n--)
{
cin>>op;
if(op[0]=='a')
{
len++;
scanf("%d",&aa) ;
it = lower_bound(num.begin(),num.end(),aa);//插入的位置
num.insert(it,aa);
}
else if(op[0]=='d')
{
len--;
scanf("%d",&aa) ;
it=lower_bound(num.begin(),num.end(),aa);//删除掉的位置
num.erase(it);
}
else
{
long long ans=0;
for(int i=2;i<len;i+=5)
ans+=num[i];//动态数组的求和
cout<<ans<<endl;
}
}
}
return 0;
}
题意:有三种类型的操作
1.”add x”表示往集合里添加数x。2.“del x”表示将集合中数x删除。3.“sum”求出从小到大排列的集合中下标模5为3的数的和。
集合中的数都是唯一的。集合是一个有序的集合。
where the set S is written as {a1, a2, … , ak} satisfying a1 < a2 < a3 < ... < ak
upper_bound返回[First,last)中,比value大的第一个元素的位置
当[First,last)中没有value这个数时,lower_bound和upper_bound返回的位置是同一个位置
注意这两个函数返回的都是迭代器