题目链接 K-th Number

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define lson i << 1, L, mid
#define rson i << 1 | 1, mid + 1, R const int N = ; struct node{
int l, r;
} tree[N << ]; int a[N], b[N], d[N * ];
int cnt = ;
int n, q; void build(int i, int L, int R){
if (L == R){
d[++cnt] = a[L];
tree[i].l = cnt;
tree[i].r = cnt;
return;
} int mid = (L + R) >> ;
build(lson);
build(rson);
tree[i].l = cnt + ;
int l1 = tree[i << ].l, r1 = tree[i << ].r;
int l2 = tree[i << | ].l, r2 = tree[i << | ].r; while (l1 <= r1 && l2 <= r2){
if (d[l1] < d[l2]) d[++cnt] = d[l1++];
else d[++cnt] = d[l2++];
} while (l1 <= r1) d[++cnt] = d[l1++];
while (l2 <= r2) d[++cnt] = d[l2++];
tree[i].r = cnt;
} int binary(int l, int r, int tmp){
if (tmp >= d[r]) return r - l + ;
if (tmp < d[l]) return ;
int L = l, R = r;
while (L < R){
int mid = (L + R) >> ;
if (d[mid] > tmp) R = mid; else L = mid + ;
} return L - l;
} int query(int i, int L, int R, int l, int r, int tmp){
if (l <= L && R <= r) return binary(tree[i].l, tree[i].r, tmp);
int mid = (L + R) >> , ret = ;
if (l <= mid) ret += query(lson, l, r, tmp);
if (r > mid) ret += query(rson, l, r, tmp);
return ret;
} int main(){ scanf("%d%d", &n, &q);
rep(i, , n) scanf("%d", a + i);
build(, , n);
rep(i, , n) b[i] = a[i];
sort(b + , b + n + ); rep(i, , q){
int l, r, tmp;
scanf("%d%d%d", &l, &r, &tmp);
int s = , t = n;
while (s < t){
int mid = (s + t) >> ;
int t1 = query(, , n, l, r, b[mid]);
if (t1 < tmp) s = mid + ;
else t = mid;
} printf("%d\n", b[s]);
} return ;
}

POJ2104 K-th Number(线段树)的更多相关文章

  1. HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对)

    HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对) 题意分析 给出n个数的序列,a1,a2,a3--an,ai∈[0,n-1],求环序列中逆序对 ...

  2. K-th Number 线段树的区间第K大

    http://poj.org/problem?id=2104 由于这题的时间限制不紧,所以用线段树水一水. 每个节点保存的是一个数组. 就是对应区间排好序的数组. 建树的时间复杂度需要nlogn 然后 ...

  3. HDU-1394 Minimum Inversion Number 线段树+逆序对

    仍旧在练习线段树中..这道题一开始没有完全理解搞了一上午,感到了自己的shabi.. Minimum Inversion Number Time Limit: 2000/1000 MS (Java/O ...

  4. K-th Number 线段树(归并树)+二分查找

    K-th Number 题意:给定一个包含n个不同数的数列a1, a2, ..., an 和m个三元组表示的查询.对于每个查询(i, j, k), 输出ai, ai+1, ... ,aj的升序排列中第 ...

  5. hdu1394Minimum Inversion Number(线段树,求最小逆序数)

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

  6. hdu1394(Minimum Inversion Number)线段树

    明知道是线段树,却写不出来,搞了半天,戳,没办法,最后还是得去看题解(有待于提高啊啊),想做道题还是难啊. 还是先贴题吧 HDU-1394 Minimum Inversion Number Time ...

  7. K - Japan(线段树)

    Japan plans to welcome the ACM ICPC World Finals and a lot of roads must be built for the venue. Jap ...

  8. [BZOJ3638 && BZOJ3272]带修区间不相交最大K子段和(线段树模拟费用流)

    https://www.cnblogs.com/DaD3zZ-Beyonder/p/5634149.html k可重区间集问题有两种建图方式,可能这一种才可以被线段树优化. 换个角度看,这也是一个类似 ...

  9. hdu - 1394 Minimum Inversion Number(线段树水题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1394 很基础的线段树. 先查询在更新,如果后面的数比前面的数小肯定会查询到前面已经更新过的值,这时候返回的sum ...

  10. bzoj3110 [Zjoi2013]K大数查询——线段树套线段树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3110 外层权值线段树套内层区间线段树: 之所以外层权值内层区间,是因为区间线段树需要标记下传 ...

随机推荐

  1. 动态规划:HDU-1203-0-1背包问题:I NEED A OFFER!

    解题心得: 动态规划就是找到状态转移方程式,但是就本题0-1背包问题来说转移方程式很简单,几乎看模板就行了. 在本题来说WA了很多次,很郁闷,因为我记录v[i]的时候i是从0开始的,一些特殊数据就很尴 ...

  2. vim 命令总结

    命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim ...

  3. loj2065 「SDOI2016」模式字符串

    ref不是太懂 #include <iostream> #include <cstring> #include <cstdio> using namespace s ...

  4. 【Longest Substring Without Repeating Characters】cpp

    题目: Given a string, find the length of the longest substring without repeating characters. For examp ...

  5. android adb常用指令

    介绍一个更详细的介绍ADB的: https://github.com/mzlogin/awesome-adb/blob/master/README.md ----------------------- ...

  6. python-day5-装饰器第二弹之多层装饰器

    多层装饰器 #首先我们先实现一个简单的登陆与权限验证功能,注意看执行结果 USER_INFO = {} def check_login(func): def inner(*args,**kwargs) ...

  7. mvc项目限制请求类型

    MVC 5限制所有HTTP请求必须是POST方式 这篇文章讲述了如何限制请求类型.

  8. HDU 4180 扩展欧几里得

    RealPhobia Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. java实现图的深度优先遍历和广度优先遍

    首先需要知道的是,图的深度优先遍历是一种类似于树的前序遍历方式,即选择一个入口节点,沿着这个节点一直遍历下去,直至所有节点都被访问完毕:如果说,图的深度优先遍历类似于树的前序遍历的话,那么图的广度优先 ...

  10. 【转】 [UnityUI]UGUI射线检测

    http://blog.csdn.net/lyh916/article/details/50947026 1.Graphic Raycaster 主要用于UI上的射线检测,挂有这个组件的物体,必须要挂 ...