zoj 3612 (multiset)
来源:互联网 发布:linux命令 cp r 编辑:程序博客网 时间:2024/04/30 18:31
最笨的方法是自己实现红黑树然后标记count,这样在O(logn)时间实现kth。当然我们不需要造轮子,因为已经有multiset这种东西,稍微拿来改一改就可以了,由于只需要考虑第size/2个数,效率可以分摊到O(1)。当然我们还需要知道,multiset有两条重要的性质:1、相同的数往右子树插入,2、排序是稳定的——也就是插入和删除时不会更改相同键值Item的前序遍历顺序。这样就够了。
#include <cstdio>#include <cstring>#include <iostream>#include <queue>#include <set>#include <algorithm>#include <vector>using namespace std;#define LL long long#define CL(a, val) memset(a, val, sizeof(a))typedef pair<int, int> PII;#define MOD 1000003multiset<int> s;multiset<int>::iterator it; multiset<int>::iterator it1; multiset<int>::iterator it2; void print_item(){ if(s.size() == 0) printf("Empty!\n"); else if(s.size() & 1) printf("%d\n", *it1); else { it2 = it1; ++ it2; LL ans = (LL)*it1 + (LL)*it2; if(ans & 1) { printf("%.1f\n", ans / 2.00); } else { printf("%lld\n", ans / 2); } }}void add_item(int x){ s.insert(x); if(s.size() == 1) { it1 = s.begin(); } else if(s.size() & 1) { if(x >= *it1) ++ it1; } else { if(x < *it1) -- it1; }}int rem_item(int x){ it = s.find(x); if(it == s.end()) return 1; if(x == *it1) { it = it1; if(s.size() & 1) -- it1; else ++ it1; } else { if(x > *it1 && (s.size() & 1)) -- it1; if(x < *it1 && !(s.size() & 1)) ++ it1; } s.erase(it); return 0;}void cd_test(){ int n; scanf("%d", &n); s.clear(); for(int i = 0; i < n; ++ i) { char sz[10]; int op; scanf("%s%d", sz, &op); if(sz[0] == 'r') { int rt = rem_item(op); if(rt) { printf("Wrong!\n"); continue; } } else { add_item(op); } print_item(); }}int main() {#if _MSC_VER == 1700 freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout);#endif int _t; scanf("%d", &_t); for(int i = 0; i < _t; ++ i) { cd_test(); } return 0;}
0 0
- zoj 3612 (multiset)
- ZOJ 3612 Median (multiset)
- ZOJ 3612 Median multiset或vector+二分
- ZOJ 3612 && HDU 4864 (multiset 的应用)
- zoj Median (multiset)
- 合并果子(multiset)
- 分奖金(multiset)
- multiset
- multiset
- multiset
- multiset
- multiset
- multiset
- multiset
- multiset
- multiset
- multiset
- Twelves Monkeys (multiset解法 141 - ZOJ Monthly, July 2015 - H)
- VS条件调试
- powerdesign使用心得
- 国内镜像网站更新AndroidSDK 的操作
- HDU1160 FatMouse's Speed LIS变种+路径
- 定时关机的小软件
- zoj 3612 (multiset)
- Oracle BBED模拟坏块&验证坏块
- Redis 缓存 + Spring 的集成示例
- jquery-easyui简单使用
- 安卓开发学习笔记(一)
- java nio多线程引起的full gc问题
- leetcode happy number
- 并查集的路径压缩
- 匿名类,try-catch语句