题目大意:add即像数字串中添加数字,del n 删除数字串中值为n的元素。sum 按照所给公式求和。
坑点:所给的数字是由小到大排序的,需要注意的是后面如果add一个数字,需要放到合适的位置。比如 3,4,7,9, 如果add 6,6需要放在4,7之间。
这道题一直超时,关键在删除值为n的元素的时候会超时,因为需要遍历。 所以使用二分搜索找到插入n的位置以及删除n的位置。
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <algorithm>
#include <set>
#include <vector>
using namespace std;
int N;
vector<int> vc;
void sum(){
long long summ=0;
for(int i=2;i<vc.size();i+=5){
summ+=vc[i];
}
cout<<summ<<endl;
}
void del(int n){
vector<int>::iterator it;
it=lower_bound(vc.begin(),vc.end(),n);
vc.erase(it);
}
void add(int n){
vector<int>::iterator it;
it=lower_bound(vc.begin(),vc.end(),n);
vc.insert(it,n);
}
void inpt(){
string str;
long long n;
cin>>str;
if(str=="sum") sum();
else if(str=="add") {
scanf("%d",&n);
add(n);
}
else{
scanf("%d",&n);
del(n);
}
}
int main()
{
while(scanf("%d",&N)!=EOF){
vc.clear();
for(int i=0;i<N;i++){
inpt();
}
}
return 0;
}