题目大意:
给你n个操作,操作的类型有 add, del,sum。 add x 就是说,给这个容器中加入一个x,del x 就是说把这个容器中的x删除掉, sum x 就是求所有下标能够%5==3的数字的和。
看了下n的范围,n<1e5,然后果断nlogn卡过去。
解题思路:
这道题的解题思路很容易理解,其实就是把所有新加入的数字扔进vector里面,然后求的时候,只要每次lower_bound(v.begin(),v.end(),tmp)就行了,起初,要定义一个vector<int>::iterator it
的迭代器,每次找到大于等于这个值的位置,然后v.insert(it,tmp)进去,如果是删除操作的话,就直接v.erase(it)就行了。%5==3的数字的可以枚举出来,因为n<=1e5,在3s内是可以接受的。
代码:
# include<cstdio>
# include<iostream>
# include<string>
# include<algorithm>
# include<vector>
using namespace std;
vector<int>v;
int main(void)
{
int n;
while ( cin>>n )
{
string str;
vector<int>::iterator it;
while ( n-- )
{
int tmp;
cin>>str;
if ( str[0]=='a' )
{
cin>>tmp;
it = lower_bound(v.begin(),v.end(),tmp);
v.insert(it,tmp);
}
else if ( str[0]=='d' )
{
cin>>tmp;
it = lower_bound(v.begin(),v.end(),tmp);
v.erase(it);
}
else
{
long long ans = 0;
for ( int i = 2;i < v.size();i+=5 )
{
ans+=v[i];
}
cout<<ans<<endl;
}
}
v.clear();
}
return 0;
}