POJ2761Feed the dogs (treap)
来源:互联网 发布:苹果怎么授权给软件 编辑:程序博客网 时间:2024/05/31 05:28
刚开始学treapA的第一个题,虽然是模板题,但是还是查了好久的错。而且这个题,用cin和cout输入输出会T
#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <cstdlib>using namespace std;const int maxn=100000+100;const int maxm=50000+500;struct Query{ int L,R,k,id; bool operator <(const Query &rhs)const{ return L<rhs.L; }}q[maxm];int n,m;int a[maxn];int ans[maxm];struct Node { Node* ch[2]; int v,r,s; int cmp(int x)const{ if(x==v)return -1; return x<v?0:1; } void maintain(){ s=1; if(ch[0]!=NULL) s+=ch[0]->s; if(ch[1]!=NULL) s+=ch[1]->s; } Node(int v):v(v){ r=rand();s=1; ch[0]=NULL;ch[1]=NULL; }};void rorate(Node* &o,int d){//d=0左旋1右旋 Node *k=o->ch[d^1];o->ch[d^1]=k->ch[d];k->ch[d]=o; o->maintain();k->maintain();o=k;}void insert(Node* &o,int x){ if(o==NULL){ o=new Node(x); }else{ int d=(x<o->v?0:1); insert(o->ch[d],x); if(o->r < o->ch[d]->r) rorate(o,d^1); } o->maintain();}void remove(Node* &o,int x){ int d=o->cmp(x); if(d==-1){ Node *u=o; if(o->ch[0]!=NULL&&o->ch[1]!=NULL){ int d2=(o->ch[0]->r<o->ch[1]->r?0:1); rorate(o,d2);remove(o->ch[d2],x); }else{ if(o->ch[0]==NULL)o=o->ch[1];else o=o->ch[0]; delete u; } }else { remove(o->ch[d],x); } if(o!=NULL)o->maintain();}int kth(Node *o,int k){ if(o==NULL||k<=0||k>o->s)return 0; int s=(o->ch[1]==NULL)?0:o->ch[1]->s; if(k==s+1)return o->v; else if(k<=s)return kth(o->ch[1],k); else return kth(o->ch[0],k-s-1);}Node* root=NULL;int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)scanf("%d",&a[i]); for(int i=1;i<=m;i++){ scanf("%d%d%d",&q[i].L,&q[i].R,&q[i].k); q[i].id=i; } sort(q+1,q+1+m); int L=1,R=1; for(int i=1;i<=m;i++){ while(L<q[i].L){ if(L<R)remove(root,a[L]); L++; } if(R<L) R=L; while(R<=q[i].R){ insert(root,a[R]); R++; } ans[q[i].id]=kth(root,R-L-q[i].k+1); } for(int i=1;i<=m;i++) printf("%d\n",ans[i]);return 0;}
阅读全文
0 0
- POJ2761Feed the dogs (treap)
- poj2761Feed the dogs【主席树|划分树】
- POJ2761 Feed the dogs(treap)
- [Treap] poj2761 Feed the dogs
- poj 2761 Feed the dogs treap
- poj 2761 Feed the dogs 离线treap
- POJ 2761 Feed the dogs [离线+treap]
- POJ 2761 Feed the dogs(Treap求第K小数)
- POJ 2761 Feed the dogs(Treap名次树+离线处理)
- poj 2761 Feed the dogs(treap+离线)
- POJ 2761 Feed the dogs Treap+离散处理
- poj 2761 Feed the dogs (Treap+离线处理)
- [poj2761]Feed the dogs
- POJ2761 Feed the dogs
- POJ2761 Feed the dogs
- POJ2761--Feed the dogs
- poj2761 Feed the dogs
- 【poj2761】 Feed the dogs
- ML笔记-Curve Fitting
- 数据结构期末复习
- 对于stm32实现跑马灯的心得
- C#中的DLL文件
- mysqldump中断的常见错误和解决措施
- POJ2761Feed the dogs (treap)
- 早早申请了账号,写点东西
- 2017/12/8(入门阶段的知识点)
- 转发
- 斐讯k2p出现银色版b1-网友购买时要选择对的版本
- 在centOS7.X上安装mysql5.7
- android 仿京东抢购上下轮播消息字幕垂直滚动
- 【Arduino入门教程之二】控制舵机转动
- Android 打造炫酷的3D画廊