【POJ 2104/HDU 2665】K-th Number【整体二分/主席树】
来源:互联网 发布:胡公子的淘宝店 编辑:程序博客网 时间:2024/06/05 21:16
【POJ 2104/HDU 2665】K-th Number【整体二分/主席树】
题意
思路
1. 主席树
2. 整体二分
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define re_ return#define inc(l, i, r) for(i=l; i<r; ++i)const int mxn=1<<17;int n, m, b[mxn], ans[mxn];struct que{int l, r, k, i;} a[mxn], q[mxn], ql[mxn], qr[mxn];//单个查询inline bool operator <(const que& a, const que& b){re_ a.k<b.k;}//---树状数组inline char add(int i, int x){for(;i<=n; i+=i&-i) b[i]+=x;}inline int sum(int i){ static int r; for(r=0; i; i-=i&-i) r+=b[i]; re_ r;}//---char div(int s, int t, int l, int r)//在查询队列中的首尾地址和二分值域左右端点{ int i, x, y, z, mid=l+r>>1, tl=0, tr=0; if(s==t || l==r-1) { inc(s, i, t) ans[q[i].i]=l; re_ 0; } x=lower_bound(a, a+n, (que){0, 0, l, 0})-a; y=lower_bound(a, a+n, (que){0, 0, mid, 0})-a; inc(x, i, y) add(a[i].i, 1);//仅遍历在左值域内的元素,插入到对应位置的树状数组中 inc(s, i, t)//将答案在当前二分值域内的查询分为答案在左右子值域内的查询 if((z=sum(q[i].r)-sum(q[i].l-1))<q[i].k)//判断同时在左值域和该查询区间内的元素的个数是否小于k q[i].k-=z, qr[tr++]=q[i];//注意,当该查询答案在右值域时,要把左值域内的元素对“第k小”的贡献考虑到。表现为“k-=z”。 else ql[tl++]=q[i]; inc(x, i, y) add(a[i].i, -1);//树状数组是全局的,需要清空 inc(0, i, tl) q[s+i]=ql[i]; inc(0, i, tr) q[s+tl+i]=qr[i]; div(s, s+tl, l, mid), div(s+tl, t, mid, r);//递归处理左右子区间}int main(){ int i; scanf("%d%d", &n, &m); inc(0, i, n) scanf("%d", &a[i].k), a[i].i=i+1; sort(a, a+n);//以值为关键字排序 inc(0, i, m) scanf("%d%d%d", &q[i].l, &q[i].r, &q[i].k), q[i].i=i; div(0, m, -(1<<30), 1<<30); inc(0, i, m) printf("%d\n", ans[i]); re_ 0;}
复杂度分析
阅读全文
0 0
- 【POJ 2104/HDU 2665】K-th Number【整体二分/主席树】
- Poj 2104 K-th Number(主席树&&整体二分)
- [POJ]2104 K-th Number 主席树&线段树合并&整体二分
- POJ 2104 K-th Number 整体二分
- poj 2104 K-th Number[整体二分]
- POJ 2104 K-th Number (划分树,主席树写过了,这次是整体二分解法 )
- [POJ 2104]K-th Number 主席树
- poj 2104 K-th Number (主席树)
- poj 2104 K-th Number【主席树】
- POJ 2104 K-th Number [主席树]
- POJ 2104 K-th Number 主席树
- 主席树 poj 2104 K-th Number
- POJ 2104 K-th Number 主席树
- POJ 2104 K-th Number(主席树)
- 【POJ 2104 K-th Number】+ 主席树
- 【POJ】2104 K-th Number 主席树
- POJ-2104:K-th Number(主席树)
- POJ 2104 K-th Number【整体二分 + 树状数组】
- 阿里云DRDS数据库调研
- Massive MIMO与MU-MIMO的区别?
- C++动态内存管理:new/delete
- 公有云逐渐取代私有云,专属云成最佳云计算形态
- jvm(二):对象加载浅谈
- 【POJ 2104/HDU 2665】K-th Number【整体二分/主席树】
- 从YOLOv1谈到YOLOv2(1)主要思想
- 技术方案分享
- GitHub客户端操作2--分支操作
- [Ybt 1349] 最优布线问题 ——最小生成树[Kruskal]
- Java异常处理
- 使用WebDriver的隐式等待需要注意的问题
- 最短路径---迪杰斯特拉算法
- 实验3.2 栈和队列——链栈