【总结】9.24-9.25
2012-09-25 22:17
106 查看
当时生日许下的愿望,要靠自己实现!
9.24-9.25
这两天主要是在玩splay,从来没写过指针版,还加内存回收,所以弄了好久,做基础题嘛..
每天晚上一道,昨天star, 今天unhappy
今天被(\n)坑惨了啊...调试n久。
然后学习了一下string。但还是不熟悉。联赛还是用p吧,万一挂了什么的,还是不好。联赛还是很重要的。
截图留念(速度奇慢球不鄙视)
code of unhappy
另外问问邓大牛,还有什么写丑的没有。(这个要怎么@人呢..)
9.24-9.25
这两天主要是在玩splay,从来没写过指针版,还加内存回收,所以弄了好久,做基础题嘛..
每天晚上一道,昨天star, 今天unhappy
今天被(\n)坑惨了啊...调试n久。
然后学习了一下string。但还是不熟悉。联赛还是用p吧,万一挂了什么的,还是不好。联赛还是很重要的。
截图留念(速度奇慢球不鄙视)
code of unhappy
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #ifdef WIN32 #define ot "%I64d" #else #define ot "%lld" #endif #define Max(a, b, t) ({t _ = (a), __ = (b); _ > __ ? _ : __;}) #define Min(a, b, t) ({t _ = (a), __ = (b); _ < __ ? _ : __;}) #define maxn 100005 using namespace std; struct node { int v, s; node *f, *c[2]; }vess[maxn]; typedef node *NODE; NODE pool[maxn], root, null; int n, mn, tot = maxn - 3, leave = 0, delta = 0; bool p; void init() { freopen("unhappy.in", "r", stdin); freopen("unhappy.out", "w", stdout); scanf("%d %d\n", &n, &mn); } void prepare() { null = new node(); null -> f = null -> c[0] = null -> c[1] = null; null -> v = null -> s = 0; root = null; for (int i = 0; i < maxn; i++) pool[i] = &vess[i]; } NODE newnode(NODE father, int val) { NODE x = pool[tot--]; if (x -> s) { if (x -> c[0] != null) pool[++tot] = x -> c[0]; if (x -> c[1] != null) pool[++tot] = x -> c[1]; } x -> f = father; x -> c[0] = x -> c[1] = null; x -> s = 1; x -> v = val; return x; } bool fc(NODE x) { return x -> f -> c[1] == x; } NODE update(NODE x) { if (x == null) return null; x -> s = x -> c[0] -> s + x -> c[1] -> s + 1; return x; } void rotate(NODE x, int k) { NODE p = x -> f; x -> c[!k] -> f = p; p -> c[k] = x -> c[!k]; x -> c[!k] = p; x -> f = p -> f; p -> f -> c[fc(p)] = x; update(p) -> f = x; } void splay(NODE to, NODE x) { while (x -> f != to) { if (x -> f -> f == to) rotate(x, fc(x)); else if (fc(x) ^ fc(x -> f)) rotate(x, fc(x)), rotate(x, fc(x)); else rotate(x -> f, fc(x -> f)), rotate(x, fc(x)); } root = update(x); } void insert(int k) { if (root == null) root = newnode(null, k); else { NODE t = root; while (t -> c[p = k > t -> v] != null) t -> s++, t = t -> c[p]; t -> s++; NODE x = newnode(t, k); t -> c[p] = x; splay(null, x); } } void dlt() { insert(mn - delta); leave += root -> c[0] -> s; root = root -> c[1]; root -> f -> c[1] = null; if (root -> f != null) pool[++tot] = root -> f; root -> f = null; } int calc(int k) { if (k > root -> s) return (-1 - delta); NODE t = root; while (1) { int r = t -> c[1] -> s + 1; if (k == r) break; if (k > r) k -= r, t = t -> c[0]; else t = t -> c[1]; } return t -> v; } int main() { char ques; init(); prepare(); int k; for (int i = 1; i <= n; i++) { scanf("%c %d\n", &ques, &k); /*就是这个 \n 坑了好久好久..*/ if (ques == 'I') { if (k < mn) continue; insert(k - delta); } else if (ques == 'F') printf("%d\n", calc(k) + delta); else if (ques == 'A') delta += k; else delta -= k, dlt(); scanf("\n"); } printf("%d", leave); return 0; }
另外问问邓大牛,还有什么写丑的没有。(这个要怎么@人呢..)
相关文章推荐
- 9.25 英语对(9.22-9.24)总结
- 【NOIP2016提高A组模拟9.24】总结
- 训练总结 9.24
- Unix Shell 学习总结 -- Unix学习总结之一
- JfreeChart用法介绍转文-待总结
- 北京吃饭和玩的地方的总结
- 计算机网络安全实验总结 本部分主要包括计算机网络操作系统的配置,网络扫描,网络监听,网络入侵。
- 【总结】网站令浏览器崩溃的原因
- 面试及总结3
- 对Java日期类型的相关操作总结
- android横竖屏总结
- CMAKE 个人总结
- Android媒体的一些使用总结
- 3D MAX 结课总结(一些模型构造的过程)
- MFC--小知识总结二
- JAVA基础学习--IO流总结<一>
- redhat linux 安装总结
- VS2010进行远程调试方法总结
- spring中Bean的生命周期总结
- Android - 文件读写操作 总结