poj 1442 treap
来源:互联网 发布:广义逆矩阵的定义 编辑:程序博客网 时间:2024/06/14 05:32
题目意思是有两种命令ADD(x)和GET(x)
ADD(x) 在已有序列中加入x元素
GET(x) 在执行x次ADD命令后得到已有序列中第i小的元素 ( i初始为0每次执行GET命令前i要先加1)
ADD和GET最多都是30000
刚开始做的时候 用到了nth_element函数 ,TLE了
因为nth_element 的复杂度为O(n) ,显然整个解过程的复杂度为O(n*n)不能满足时间要求
#include <iostream>#include <cstdio>#include <cmath>#include <string>#include <cstring>#include <cstdlib>#include <algorithm>using namespace std;const int inf = 0x3f3f3f3f;const int N = 30009;const double esp = 1e-6;int v[N];struct treap{treap *l, *r;int val, pri; //节点值,优先级int size;treap(int vv){l = NULL;r = NULL;pri = rand(); //随机数作为优先级val = vv;}}*root;int lsize(treap *p){return p->l ? p->l->size : 0;}int rsize(treap *p){return p->r ? p->r->size : 0;}void lro(treap *&p) //左旋,右孩子变成根,根变成左孩子{treap *tmp = p->r;p->r = tmp->l;tmp->l = p;tmp->size = p->size;p->size = lsize(p) + rsize(p)+1;p = tmp;}void rro(treap *&p) //右旋,左孩子变成根,根变成右孩子{treap *tmp = p->l;p->l = tmp->r;tmp->r = p;tmp->size = p->size;p->size = lsize(p) + rsize(p)+1;p = tmp;}void insert(treap *&p, int val){if(!p) //插入{p = new treap(val);p->size = 1;}else if(val <= p->val) //进入左孩子{p->size++;insert(p->l, val);if( p->l->pri < p->pri )rro(p);}else //进入右孩子{p->size++;insert(p->r, val);if(p->r->pri < p->pri)lro(p);}}int find(int k, treap *p){int tmp = lsize(p);if(k == tmp + 1) return p->val;else if(k<=tmp) return find(k, p->l);else return find(k-1-tmp, p->r);}int main(){root = NULL;int n, m, x, now=1;scanf("%d%d", &n, &m);for(int i=1; i<=n; i++) scanf("%d", &v[i]);for(int i=1; i<=m; i++){scanf("%d", &x);for( ; now<=x; now++){insert( root, v[now] );}printf("%d\n", find(i, root));}return 0;}
0 0
- poj 1442 treap
- POJ-1442-treap
- POJ 1442(Treap)
- poj 1442 treap
- POJ 1442 (treap)
- POJ 1442 Treap模板
- poj 1442 treap
- [Treap] POJ 1442
- POJ 1442 Black Box(Treap)
- POJ 1442 Black Box ( Treap )
- POJ 1442 Black Box(Treap)
- POJ 1442(treap || 优先队列)
- POJ 1442 Black Box [treap]
- POJ 1442 Black Box(treap)
- POJ 1442 (Treap 板子记录)
- POJ 1442 Black Box [Treap]
- POJ 1442 Black Box Treap
- poj 1442 Black Box(Treap)
- IT高薪者所具备的人格魅力
- Android性能优化总结
- C#数字图像处理<五>
- 第7周项目1电阻串联
- 鼠标移到图片上变成小手形状
- poj 1442 treap
- 深入理解sizeof与strlen
- 记忆的奥秘
- 指法无优劣,功力有高下
- linux增加自定义path和manpath
- Matlab 单位阶跃响应曲线三维图、上升时间、峰值时间、最大过调量和调整时间
- [译] 理解 Objective-C Runtime
- 我的项目10:Android的webview支持HTML5的离线应用功能详细配置
- MYSQL禁用生成日志文件mysql-bin.000001