题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6621

题意为求区间[l,r]内第k小|a[i]-p|的值。

可以二分答案,如果二分的值为x,则判断区间[l,r]内是否有k个数在[p-x,p+x]范围内。所以就用主席树搞一下。

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<string>
 5 #include<cmath>
 6 #include<vector>
 7 #define lson l, mid, i<<1
 8 #define rson  mid + 1, r, i<<1|1
 9 using namespace std;
10 typedef long long ll;
11 const int maxn = 1e6 + 10;
12 int root[maxn], rs[maxn * 20], ls[maxn * 20], val[maxn * 20];
13 int cnt;
14 void update(int k, int l, int r, int &i) {
15     val[++cnt] = val[i] + 1, ls[cnt] = ls[i], rs[cnt] = rs[i];
16     i = cnt;
17     if (l == r)
18         return;
19     int mid = l + r >> 1;
20     if (k <= mid)
21         update(k, l, mid, ls[i]);
22     else
23         update(k, mid + 1, r, rs[i]);
24 }
25 int query(int u, int v, int L, int R, int l, int r) {
26     if (L <= l && r <= R)
27         return val[u] - val[v];
28     int mid = l + r >> 1;
29     int ans = 0;
30     if (L <= mid)
31         ans += query(ls[u], ls[v], L, R, l, mid);
32     if (R > mid)
33         ans += query(rs[u], rs[v], L, R, mid + 1, r);
34     return ans;
35 }
36 int check(int L, int R, int p, int x) {
37     int l = max(p - x, 1), r = min(p + x, (int)1e6);
38     return query(root[R], root[L - 1], l, r, 1, 1e6);
39 }
40 int main() {
41     int t;
42     scanf("%d", &t);
43     while (t--) {
44         int n, m, x, cnt = 0;
45         scanf("%d%d", &n, &m);
46         for (int i = 1; i <= n; i++) {
47             scanf("%d", &x);
48             root[i] = root[i - 1];
49             update(x, 1, 1e6, root[i]);
50         }
51         int ans = 0, L, R, p, k;
52         for (int i = 1; i <= m; i++) {
53             scanf("%d%d%d%d", &L, &R, &p, &k);
54             L ^= ans, R ^= ans, p ^= ans, k ^= ans;
55             int l = 0, r = 1e6;
56             while (l <= r) {
57                 int mid = l + r >> 1;
58                 int w = check(L, R, p, mid);
59                 if (w >= k) {
60                     r = mid - 1;
61                     ans = mid;
62                 }
63                 else
64                     l = mid + 1;
65             }
66             printf("%d\n", ans);
67         }
68     }
69 }

转载于:https://www.cnblogs.com/sainsist/p/11350015.html

[2019杭电多校第四场][hdu6621]K-th Closest Distance(主席树)相关推荐

  1. 2019杭电多校 第七场 Kejin Player 6656(求期望值)

    2019杭电多校 第七场 Kejin Player 6656(求期望值) 题目 http://acm.hdu.edu.cn/showproblem.php?pid=6656 题意 给你n,q.表示有n ...

  2. 2019杭电多校第9场1002 Rikka with Cake HDU6681

    2019杭电多校第9场1002 Rikka with Cake HDU6681 题意:给你若干个点按上下左右切割平面,最后问平面内有几块被切割开来. 解法1:红黑树+思维+贪心 A:根据欧拉定理可以得 ...

  3. 杭电多校第四场-H- K-th Closest Distance

    题目描述 You have an array: a1, a2, , an and you must answer for some queries. For each query, you are ...

  4. 【2019.08.21】2019杭电多校第十场

    补题地址:http://acm.hdu.edu.cn/listproblem.php?vol=58 题号:6691-6701 1001: 1002: 1003:✅ 1004: 1005:✅ 1006: ...

  5. 2019 杭电多校第六场 题解

    比赛记录 注意随机数据 ,1-n排列这种,一般都有啥暴力重构之类的方法,期望重构次数很少之类的 1005也是这样,因为n^2但只有n个值有数,所以就可以n^2logn 题解 1001 Salty Fi ...

  6. 2019杭电多校第三场 6608 Fansblog(威尔逊定理+miller_rabin素性测试)

    Problem Description 传送门 Farmer John keeps a website called 'FansBlog' .Everyday , there are many peo ...

  7. 2019 杭电 多校第3场 1006 Fansblog (HDU 6608)

    题目链接 题解: 用威尔逊定理变换,然后求逆元. 代码: #include <bits/stdc++.h> using namespace std; typedef long long l ...

  8. hdu 6656 2019杭电多校第7场 期望题

    设f[i]为从i升级到i+1期望需要的金钱,由于每级都是能倒退或者升级到i+1,所以询问从l,r的期望金钱可以直接前缀和,那么推导每一级升级需要的期望钱也可以用前缀和推导 设sum[i]=f[1]+f ...

  9. 2019杭电多校第7场 K Kejin Player HDU 6656(数学推导)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6656 题目大意:对于每一个等级,可以花ai元,有pi概率升级,如果升级失败就退到xi级,问从li级升到 ...

  10. 2019杭电多校第七场 HDU - 6656 Kejin Player 期望

    题目链接:https://vjudge.net/problem/HDU-6656 题解: 维护一个前缀sum[i] : 从1到 i 的期望 第 i 到达 i + 1是:ai + (1 - r[i] / ...

最新文章

  1. JavaScript技巧
  2. 应用深度学习使用 Tensorflow 对音频进行分类
  3. python编辑邮件格式_python发送邮件模板
  4. python实例 75,76
  5. MAC 系统下允许NTFS磁盘读写
  6. Objectove-c单例模式
  7. python seaborn_Python数据分析之Seaborn(回归分析绘图)
  8. Docker入门者手册
  9. 关于期刊论文所涉及的一些概念汇编+期刊查询方法
  10. 【AutoSec 汽车安全直播课】:整车网络安全威胁分析与风险评估(TARA)方法与实践
  11. 2022年后人工智能八大应用方向
  12. 从“富客户端”(RIA)说到 Flex AIR
  13. python绘制中国_如何用Python画一个中国地图?
  14. 解决Windows Update错误“80072EFD”
  15. ANSYS FLUENT瞬态模拟动画制作
  16. 一位营销总监的辞职信
  17. Hazel引擎学习(一)
  18. WaitGroup is reused before previous Wait has returned
  19. 房价会不会降?这位机器人八小时就能建造一栋房屋 | 聚焦
  20. 潜力?高薪?期权?你到底该不该去初创公司上班?

热门文章

  1. (转)正则表达式—RegEx(RegularExpressio)(三)
  2. 减小数据泄密负面影响的办法
  3. .net2005底层类
  4. 做了那么多营销,为什么没有效果?
  5. 趣图:他居然在前端写业务逻辑!
  6. 实战案例:贷款分析之plotly VS ggplot2
  7. 耿建超英语语法---连词
  8. bzoj 1228 [SDOI2009]ED
  9. 【转】webservice 测试地址
  10. RocketMQ入门(2)最佳实践