CF85D Sum of Medians
CF85D Sum of Medians
题意翻译
-
有一个集合,初始为空。现有nn次操作:
add x
:将 xx 添加到集合中。del x
:将 xx 从集合中删除。sum
:将集合内的数从小到大排好序后形成有 kk 个数的序列 aa,求
\sum_{i}^{(i\le k)\land (i\bmod 5=3)}a_ii∑(i≤k)∧(imod5=3)a**i
-
1\le n\le 10^51≤n≤105,1\le x\le 10^91≤x≤109。
题解:
用这道题学会了一些vector的奇技淫巧。
vector其实可以维护有序,也就是说,它支持像链表一样的操作,在某一个位置前插入元素。
这就是 insert() 函数。
insert函数可以在指定位置前加上一个元素,加上多个相同元素,或者插入一个区间的所有元素
这道题就是一个序列,add就是添加一个数,del就是删除一个数,sum让你求将该序列从小到大排序后所有v[i]的v[i]的和。
于是就暴力插入删除。时间复杂度差不多可过。
代码:
#include<cstdio>
#include<algorithm>
#include<vector>
#define ll long long
using namespace std;
vector<int> v;
int n;
int main()
{
scanf("%d",&n);
while(n--)
{
int x;
char op[3];
scanf("%s",op);
if(op[0]=='a')
{
scanf("%d",&x);
v.insert(lower_bound(v.begin(),v.end(),x),x);
}
else if(op[0]=='d')
{
int x;
scanf("%d",&x);
v.erase(lower_bound(v.begin(),v.end(),x));
}
else
{
ll ans=0;
for(int i=2;i<v.size();i+=5)
ans+=v[i];
printf("%lld\n",ans);
}
}
return 0;
}