[HNOI 2002]营业额统计
来源:互联网 发布:数组作为形参 编辑:程序博客网 时间:2024/05/20 20:01
题意
给定n次操作,每次加入一个新数字,并向答案累加其前驱/后继和其差的较小值。
思路
平衡树裸题,而且我们只需要添加,不需要删除,支持查找前驱,后继。
所以说想法很暴,写起来难度也不大。
代码
#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <iostream>using namespace std;const int INF=0x3f3f3f3f;struct Node{ Node *ch[2]; int r,v; int cmp(int x) const { if(x==v) return -1; return x>v; }};void Rotate(Node* &o, int d) { Node* k=o->ch[d^1]; o->ch[d^1]=k->ch[d]; k->ch[d]=o; o=k;}bool Contain(Node* o, int x) { while(o!=NULL) { int d=o->cmp(x); if(d==-1) return true; else o=o->ch[d]; } return false;}void Insert(Node* &o,int x) { if(Contain(o,x)) return; if(o==NULL) { o=new Node(); o->ch[0]=o->ch[1]=NULL; o->v=x; o->r=rand(); } else{ int d=o->cmp(x); Insert(o->ch[d],x); if(o->ch[d]->r>o->r) Rotate(o, d^1); }}int findmax(Node* o, int x) { if (o==NULL) return INF; if (x>=o->v) return findmax(o->ch[1],x); else return min(o->v,findmax(o->ch[0],x));}int findmin(Node* o, int x) { if (o==NULL) return -INF; if (x<=o->v) return findmin(o->ch[0],x); else return max(o->v,findmin(o->ch[1],x));}Node *tree;int main() { int n; scanf("%d", &n); int ans=0; for(int i=1; i<=n; i++) { int x; scanf("%d", &x); if(Contain(tree, x)) continue; Insert(tree, x); int mx=findmax(tree, x); int mn=findmin(tree, x); if(mx+mn==0) ans+=x; else ans+=min(abs(x-mx),abs(x-mn)); } printf("%d\n", ans); return 0;}
阅读全文
0 0
- HNOI 2002 营业额统计
- [HNOI 2002]营业额统计
- 【Treap】[HNOI 2002]营业额统计
- CJOJ 1308 【HNOI 2002 】营业额统计 / CodeVS 1296 营业额统计
- HNOI 2002 营业额统计 Splay Tree
- HNOI 2002 营业额统计 Splay解法
- [BZOJ 1588] HNOI 2002 营业额统计
- BZOJ 1588 [HNOI 2002] 营业额统计 Splay
- HNOI 2002 营业额统计(Splay入门)
- BZOJ 1588 [HNOI 2002] 营业额统计
- splay bzoj 1588 营业额统计(HNOI 2002)
- 【HNOI 2002 】营业额统计(splay)
- HNOI 2002 营业额统计(Splay树)
- HNOI营业额统计
- hnoi 2002 营业额统计(splay入门题)
- 【BZOJ 1588】【HNOI 2002】营业额统计(treap模板题)
- NOI 2002 营业额统计
- 营业额统计
- 重温C++小知识----- 类
- 一起学Netty(六)之 TCP粘包拆包场景
- Java 异常处理
- 交叉验证获得最佳二元决策树深度
- java web中jsp,action,service,dao,po分别是什么意思和什么作用
- [HNOI 2002]营业额统计
- 程序猿健身之腹肌~基本版本
- ubuntu14.10建立热点wifi分享
- 慢查日志(一)
- 线段树 (更新区间查询点)秋实大哥与小朋友
- 使用Qt中的工作线程,模拟上传文件(需要用到定时器,线程知识)
- 理解JVM(6)Class装载系统
- 如何在vue-cli使用bootstrap框架
- 算法习题_快速排序的非递归解法