Feed the dogs POJ - 2761 (主席树第K大)
2017-07-19 15:33
573 查看
题意:
找l~r第k大的数
找l~r第k大的数
#include <iostream> #include <stdio.h> #include <map> #include <algorithm> using namespace std; const int maxn=100001; int a[maxn]; int root[maxn*20]; struct node { int lc,rc,num; }tree[maxn*20]; int cnt,rnu,now,number[maxn]; void build(int &i,int l,int r) { tree[++cnt]=tree[i]; i=cnt; if(l==r) return ; int mid=(l+r)>>1; build(tree[i].lc,l,mid); build(tree[i].rc,mid+1,r); } void update(int &i,int l,int r,int num) { tree[++cnt]=tree[i]; i=cnt; tree[i].num++; if(l==r) return ; int mid=(l+r)>>1; if(num<=a[mid]) update(tree[i].lc,l,mid,num); else update(tree[i].rc,mid+1,r,num); } int query(int i,int j,int l,int r,int k) { if(l==r) return a[l]; int mid=(l+r)>>1; if(tree[tree[j].lc].num-tree[tree[i].lc].num>=k) query(tree[i].lc,tree[j].lc,l,mid,k); else query(tree[i].rc,tree[j].rc,mid+1,r,k-(tree[tree[j].lc].num-tree[tree[i].lc].num)); } int main() { int n,m; scanf("%d%d",&n,&m); cnt=rnu=now=0; for(int i=1;i<=n;i++) scanf("%d",&number[i]),a[i]=number[i]; sort(a+1,a+1+n); rnu=unique(a+1,a+1+n)-a-1; // cout<<rnu<<endl; build(root[0],1,rnu); for(int i=1;i<=n;i++) { now++; update(root[now]=root[now-1],1,rnu,number[i]); } for(int i=1;i<=m;i++) { int l,r,k; scanf("%d%d%d",&l,&r,&k); printf("%d\n",query(root[l-1],root[r],1,rnu,k)); } }
相关文章推荐
- POJ 2761 Feed the dogs 主席树(区间第k大)
- POJ - 2104 K-th Number && POJ 2761 Feed the dogs(主席树静态区间第k大)
- Splay树(区间第k小)——POJ 2761 Feed the dogs
- POJ 2761 Feed the dogs 求区间第k大 划分树
- POJ 2761 Feed the dogs(Treap求第K小数)
- POJ 题目2761 Feed the dogs(主席树||划分树)
- POJ 2761-Feed the dogs(划分树)求区间内第k小的数
- POJ 2761 Feed the dogs 求区间第k大 划分树
- POJ 2761 Feed the dogs(主席树)
- POJ 2761 Feed the dogs 主席树
- POJ 2761 Feed the dogs(主席树)
- POJ 2761 Feed the dogs (主席树)(K-th 值)
- POJ 2761 Feed the dogs(树状数组求区间第K大)
- POJ 题目2761 Feed the dogs(主席树||划分树)
- POJ2761[Feed the dogs ] 不带修改主席树
- POJ 2761 Feed the dogs(划分树)
- poj 2761 Feed the dogs SBT
- POJ 2761 Feed the dogs [离线+treap]
- POJ 2761 Feed the dogs (SBT+离线处理询问)
- poj 2761 Feed the dogs 平衡树,线段树,树状数组