BZOJ1588 [HNOI2002] 营业额统计
2015-11-26 21:31
337 查看
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1588
又是一道Treap模版题……总做模版题不好……
另外牢记:BZOJ上用srand(time(0))会RE!
View Code
又是一道Treap模版题……总做模版题不好……
另外牢记:BZOJ上用srand(time(0))会RE!
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <ctime> #define rep(i,l,r) for(int i=l; i<=r; i++) #define clr(x,y) memset(x,y,sizeof(x)) typedef long long ll; typedef unsigned long long ull; using namespace std; const int INF = 0x3f3f3f3f; const int maxn = 50010; struct node{ int v,w,l,r,rnd,size; }t[maxn]; int n,x,t1,t2,tot=0,root=0,ans=0; inline int read(){ int ans = 0, f = 1; char c = getchar(); while (!isdigit(c)){ if (c == '-') f = -1; c = getchar(); } while (isdigit(c)){ ans = ans * 10 + c - '0'; c = getchar(); } return ans * f; } inline void update(int w){ t[w].size = t[t[w].l].size + t[t[w].r].size + t[w].w; } void rotl(int &w){ int k = t[w].r; t[w].r = t[k].l; t[k].l = w; update(w); update(k); w = k; } void rotr(int &w){ int k = t[w].l; t[w].l = t[k].r; t[k].r = w; update(w); update(k); w = k; } void insert(int x,int &w){ if (!w){ w = ++tot; t[w].v = x; t[w].size = t[w].w = 1; t[w].rnd = rand(); t[w].l = t[w].r = 0; return; } t[w].size++; if (t[w].v == x) t[w].w++; else if (x < t[w].v){ insert(x,t[w].l); if (t[t[w].l].rnd < t[w].rnd) rotr(w); } else{ insert(x,t[w].r); if (t[t[w].r].rnd < t[w].rnd) rotl(w); } } void bef(int x,int w){ if (!w) return; if (t[w].v <= x){ t1 = t[w].v; bef(x,t[w].r); } else bef(x,t[w].l); } void aft(int x,int w){ if (!w) return; if (t[w].v >= x){ t2 = t[w].v; aft(x,t[w].l); } else aft(x,t[w].r); } int main(){ n = read(); rep(i,1,n){ if (scanf("%d",&x) == EOF) x = 0; t1 = -INF; t2 = INF; bef(x,root); aft(x,root); if (i == 1) ans += x; else ans += min(x-t1,t2-x); insert(x,root); } printf("%d\n",ans); return 0; }
View Code
相关文章推荐
- action中result没有值
- 机器学习 之 形变部件模型 浅析
- 全屏滚动制作!!
- 黑马程序员—JAVA基础—数组
- Delphi2007下CIS的clHttp使用
- android viewPager 自动播放
- Android在代码中设置控件的drawableLeft,drawableRight,drawableTop,drawableBottom。
- Linux下的TCP延迟确认机制--TCP_QUICKACK
- 【C语言】判断单链表是否带环
- 重新编译NDK库
- mysql 一条update语句实现两个表数据合并
- LVM挂载失败mount: you must specify the filesystem type
- LDA 初见(JGibbLDA-v.1.0 eclipse使用)
- 正则表达式的威力4_小练习校验邮箱
- CocoaPods的安装使用和常见问题
- beanPostProcessor
- git客户端的使用
- 测透51汇编 51单片机定时器模块程序
- 使用批处理文件(.bat)启动Java程序
- Gson的简单使用