CF85D Sum of Medians

CF85D Sum of Medians

洛谷传送门

题意翻译

  • 有一个集合,初始为空。现有nn次操作:

    1. add x:将 xx 添加到集合中。
    2. del x:将 xx 从集合中删除。
    3. sum:将集合内的数从小到大排好序后形成有 kk 个数的序列 aa,求

    \sum_{i}^{(i\le k)\land (i\bmod 5=3)}a_ii∑(ik)∧(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;
}
posted @ 2020-11-30 08:09  Seaway-Fu  阅读(107)  评论(0编辑  收藏  举报