静态区间第K大
来源:互联网 发布:淘宝开店卖捕鱼游戏币 编辑:程序博客网 时间:2024/04/30 13:59
<a target=_blank href="http://poj.org/problem?id=2104" target="_blank"><span style="font-size:24px;">POJ 2104</span></a>
POJ 2761
做法好多,主席树,划分树,离线处理(曼哈顿最小生成树?)+BST(Treap or Splay or SBT),貌似分治+BIT也可以,不过懒得搞了。
以后复习模板时用得上。
主席树:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=100010;struct Node{int l,r,w;}tr[N*20];int a[N],b[N],rank[N],root[N],sz;void ins(int &i,int l,int r,int x){tr[++sz]=tr[i];i=sz;tr[i].w++;if(l==r)return;int m=l+r>>1;if(x<=m)ins(tr[i].l,l,m,x);else ins(tr[i].r,m+1,r,x);}int query(int i,int j,int l,int r,int k){if(l==r)return l;int m=l+r>>1;int tmp=tr[tr[j].l].w-tr[tr[i].l].w;if(k<=tmp)return query(tr[i].l,tr[j].l,l,m,k);else return query(tr[i].r,tr[j].r,m+1,r,k-tmp);}inline bool cmp(int i,int j){return a[i]<a[j];}int main(){int n,m;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&a[i]);rank[i]=i;}sort(rank+1,rank+1+n,cmp);for(int i=1;i<=n;i++)b[rank[i]]=i;for(int i=1;i<=n;i++){root[i]=root[i-1];ins(root[i],1,n,b[i]);}int x,y,k;while(m--){scanf("%d%d%d",&x,&y,&k);int tmp=query(root[x-1],root[y],1,n,k);printf("%d\n",a[rank[tmp]]);}return 0;}
0 0
- 静态区间第K大
- poj2761(静态区间第k大,treap)
- poj2140 K-th Number(静态区间第 k 大)
- 区间第K大
- 第K大区间
- 区间第k大
- poj2761&&poj2104 主席树(静态区间第K大)
- 静态区间第k大(划分树)
- 静态区间第k大(归并树)
- 静态区间第k大(分桶法和平方分割)
- 静态区间第k大(主席树)
- 主席树求静态区间第K大
- 主席树(静态区间第k大)
- 静态区间第k大数
- poj2104 区间第K大
- 区间第K大值
- poj 2104 K-th Number 静态区间第K大 可持续数据结构
- spoj K-th Number (classic! 区间静态第k大)
- 北大OJ3414
- iOS 9 请求网络数据出现:App Transport Security has blocked a cleartext HTTP (http://) resource load since it
- 从头认识java-12.5 代理以及动态代理
- xcode 使用代码块Code Snippets
- Struts2的国际化
- 静态区间第K大
- 方法选择器的妙用
- 北大OJ1298
- 黑马程序员——java高新技术---线程池
- USACO 3.3 Home on the Range 家的范围(二维DP)
- 北大OJ2390
- 实现拦截器类
- 堆栈概念
- (八十四)字符函数库cctype