POJ2104 K-th Number【主席树】
2015-06-27 17:02
330 查看
题意:给一段序列,还有一些询问,查询l-r中的第k大的数是什么
主席树求第K大的板子,维护前缀和,然后作差二分找第k大就是
主席树求第K大的板子,维护前缀和,然后作差二分找第k大就是
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MAXN=100010; int tot,a[MAXN],n; int vec[MAXN],idx; int c[MAXN*30],lson[MAXN*30],rson[MAXN*30]; int T[MAXN]; int build(int l,int r) { int root=tot++; c[root]=0; if(l!=r) { int mid=(l+r)>>1; lson[root]=build(l,mid); rson[root]=build(mid+1,r); } return root; } int update(int root,int pos,int val) { int newroot=tot++; int tmp=newroot; c[newroot]=c[root]+val; int l=1,r=n; while(l<r) { int mid=(l+r)>>1; if(pos<=mid) { lson[newroot]=tot++; rson[newroot]=rson[root]; newroot=lson[newroot]; root=lson[root]; r=mid; } else { rson[newroot]=tot++; lson[newroot]=lson[root]; newroot=rson[newroot]; root=rson[root]; l=mid+1; } c[newroot]=c[root]+val; } return tmp; } int query(int l_root,int r_root,int k) { int l=1,r=n; while(l<r) { int mid=(l+r)>>1; if(k<=c[lson[r_root]]-c[lson[l_root]]) { l_root=lson[l_root]; r_root=lson[r_root]; r=mid; } else { k-=c[lson[r_root]]-c[lson[l_root]]; r_root=rson[r_root]; l_root=rson[l_root]; l=mid+1; } } return r; } int HASH(int val) { int l=1,r=idx; while(l<=r) { int mid=(l+r)>>1; if(vec[mid]==val) return mid; if(vec[mid]<val) l=mid+1; else r=mid-1; } return l; } int main() { int m,i; while(scanf("%d%d",&n,&m)==2) { for(i=1;i<=n;i++) { scanf("%d",&a[i]); vec[i]=a[i]; } tot=0; idx=1; for(i=2;i<=n;i++) { if(vec[idx]!=vec[i]) vec[++idx]=vec[i]; } sort(vec+1,vec+idx+1); T[0]=build(1,idx); for(i=1;i<=n;i++) { int x=HASH(a[i]); //printf("x=%d\n",x); T[i]=update(T[i-1],x,1); } while(m--) { int l,r,x; scanf("%d%d%d",&l,&r,&x); printf("%d\n",vec[query(T[l-1],T[r],x)]); } } return 0; }
相关文章推荐
- Flash遮罩应用和声音漏洞修复
- 高通 android平台LCD驱动分析
- 快速排序
- Linux输入/输出重定向的使用
- lejos+ev3+win7环境搭建
- 动态顺序表
- LeetCode之“链表”:在O(1)时间删除链表节点
- Android UI 之 ProgressBar、ProgressDialog、AlertDialog
- MySQL 内存溢出
- Unity镜头特写效果
- string.format的用法 (java)
- jQuery学习(选择器)
- LitePal数据库框架的使用
- Android UI 之 ProgressBar、ProgressDialog、AlertDialog
- 编译cm12.1
- const 修饰函数参数,返回值,函数体
- 3.24
- 函数 ,数组
- 使用STL中的list容器实现单链表的操作
- Neil·Zou 语录一