Yandex.Algorithm 2011 Round 1(STL!)
来源:互联网 发布:xp升级 软件 编辑:程序博客网 时间:2024/06/11 20:46
In one well-known algorithm of finding the k-th order statistics we should divide all elements into groups of five consecutive elements and find the median of each five. A median is called the middle element of a sorted array (it's the third largest element for a group of five). To increase the algorithm's performance speed on a modern video card, you should be able to find a sum of medians in each five of the array.
A sum of medians of a sorted k-element set S = {a1, a2, ..., ak}, where a1 < a2 < a3 < ... < ak, will be understood by as
The operator stands for taking the remainder, that is stands for the remainder of dividing x by y.
To organize exercise testing quickly calculating the sum of medians for a changing set was needed.
The first line contains number n (1 ≤ n ≤ 105), the number of operations performed.
Then each of n lines contains the description of one of the three operations:
- add x — add the element x to the set;
- del x — delete the element x from the set;
- sum — find the sum of medians of the set.
For any add x operation it is true that the element x is not included in the set directly before the operation.
For any del x operation it is true that the element x is included in the set directly before the operation.
All the numbers in the input are positive integers, not exceeding 109.
For each operation sum print on the single line the sum of medians of the current set. If the set is empty, print 0.
Please, do not use the %lld specificator to read or write 64-bit integers in C++. It is preferred to use the cin, cout streams (also you may use the %I64d specificator).
6add 4add 5add 1add 2add 3sum
3
14add 1add 7add 2add 5sumadd 6add 8add 9add 3add 4add 10sumdel 1sum
51113
题意:
给出n个操作
.add x 表示向集合中添加x(添加x的时候保证x是第一次被添加入集合)
.del x 表示从集合中删除x (删除x的时候保证x存在于集合中)
.sum 将集合排序后,询问集合里面所有下标i % 5 = 3的元素的和(如果集合为空输出0)
1 <= n <= 10^5
0 < x <= 1e9
题解:
这个题居然是STL解决的!
直接使用vector的函数,del, add操作复杂度o(log(n))。 sum操作为o(n),由基本不等式得,最坏的情况,为前1e5/2 次都是add,后1e5/2次全是sum。 操作次数为 (1e5 / 2) * (1e5 / 2 / 5) = 5e8。暴力。
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<vector>#include<queue>#include<stack>using namespace std;#define rep(i,a,n) for (int i=a;i<n;i++)#define per(i,a,n) for (int i=n-1;i>=a;i--)#define pb push_back#define fi first#define se secondtypedef vector<int> VI;typedef long long ll;typedef pair<int,int> PII;const int inf=0x3fffffff;const ll mod=1000000007;const int maxn=20+10;vector<int> V;int main(){ int n; scanf("%d",&n); rep(i,1,n+1) { char s[10]; scanf("%s",s); if(s[0]=='s') { ll ans=0; for(int i=2;i<V.size();i+=5) ans+=V[i]; printf("%lld\n",ans); } else if(s[0]=='a') { int x; scanf("%d",&x); V.insert(lower_bound(V.begin(),V.end(),x),x); } else { int x; scanf("%d",&x); V.erase(lower_bound(V.begin(),V.end(),x)); } } return 0;}
- Yandex.Algorithm 2011 Round 1(STL!)
- Codeforces Yandex.Algorithm 2011 Round 1 85D 线段树
- Codeforces Yandex.Algorithm 2011 Round 2 D
- Yandex.Algorithm 2011 Round 2 D
- Yandex.Algorithm 2011 Round 2 D. Powerful array(莫队算法)
- Yandex.Algorithm 2011 Round 2-D - Powerful array-莫队算法(分块算法)
- Yandex.Algorithm Online Round 3 Sunday, June 15, 2014
- Yandex.Algorithm 2016 Qualification Round 题解(待补)
- Yandex.Algorithm 2016 Online Round 2 题解(待补)
- Yandex.Algorithm 2011 A. Double Cola
- Yandex.Algorithm 2011 Qualification 2 A. Double Cola
- Yandex.Algorithm 2011 Qualification 2 A.(数学)
- Codeforces Yandex.Algorithm 2011 Qualification 2 / 82A Double Cola (数学规律&模拟)
- STL algorithm (1) : numeric part
- 【CodeForces Yandex Algorithm 2011 D】【莫队分块】区间所有数值乘其数个数的平方
- stl algorithm
- 【STL】algorithm
- STL algorithm
- L1-024. 后天
- Java基于UDP实现服务器和多客户端之间的通信
- HDU3410 Passing the Message(单调队列模板)
- 链路层&&网络层
- PTA自测-3 数组元素循环右移问题
- Yandex.Algorithm 2011 Round 1(STL!)
- L1-025. 正整数A+B
- 文奇的网易实习日记连载3.2-幸运
- 1.Javascript基础-介绍、实现、输出
- EF框架核心--EDM设计器
- Python分布式爬虫前菜(1):关于静态动态网页内容获取的N种方法
- 软件分享篇(Windows10)
- 2017年的目标
- 从源码角度看Activity知识点(一)