K-th Closest Distance

题目传送门

解题思路

二分答案+主席树

先建主席树,然后二分答案mid,在l和r的区间内查询[p-mid, p+mid]的范围内的数的个数,如果大于k则说明这个范围内存在第k小的数,r=mid,否则不存在,l=mid+1。

代码如下

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll; inline int read(){
int res = 0, w = 0; char ch = 0;
while(!isdigit(ch)){
w |= ch == '-', ch = getchar();
}
while(isdigit(ch)){
res = (res << 3) + (res << 1) + (ch ^ 48);
ch = getchar();
}
return w ? -res : res;
} const int N = 1000005; int rt[N], cnt;
struct T{
int l, r;
int lch, rch;
int sum;
}tree[N * 30]; inline int build(int l, int r)
{
int p = ++cnt;
tree[p].l = l;
tree[p].r = r;
tree[p].lch = tree[p].rch = tree[p].sum = 0;
if(l == r)
return p;
int mid = (l + r) / 2;
tree[p].lch = build(l, mid);
tree[p].rch = build(mid + 1, r);
return p;
} inline int insert(int k, int x)
{
int p = ++cnt;
tree[p].l = tree[k].l;
tree[p].r = tree[k].r;
tree[p].lch = tree[k].lch;
tree[p].rch = tree[k].rch;
tree[p].sum = tree[k].sum + 1;
if(tree[k].l == tree[k].r)
return p;
int mid = (tree[k].l + tree[k].r) / 2;
if(x <= mid)
tree[p].lch = insert(tree[k].lch, x);
else
tree[p].rch = insert(tree[k].rch, x);
return p;
} int query(int k1, int k2, int l, int r)
{
if(tree[k1].l >= l && tree[k1].r <= r)
return tree[k2].sum - tree[k1].sum;
int mid = (tree[k1].l + tree[k1].r) / 2;
int m1 = 0, m2 = 0;
if(l <= mid)
m1 = query(tree[k1].lch, tree[k2].lch, l, r);
if(r > mid)
m2 = query(tree[k1].rch, tree[k2].rch, l, r);
return m1 + m2;
} int main()
{
int _;
scanf("%d", &_);
while(_ --){
int n, m;
scanf("%d%d", &n, &m);
rt[0] = build(1, 1e6);
for(int i = 1; i <= n; i ++){
int x = read();
rt[i] = insert(rt[i -1], x);
}
int x = 0;
for(int i = 1; i <= m; i ++){
int l, r, p, k;
l = read(), r = read(), p = read(), k = read();
l ^= x, r ^= x, p ^= x, k ^= x;
int ll = 0, rr = 1e6;
int mid = (ll + rr) / 2;
while(ll < rr){
if(query(rt[l - 1], rt[r], max(1, p - mid), min(p + mid, 1000000)) >= k)
rr = mid;
else
ll = mid + 1;
mid = (ll + rr) / 2;
}
x = mid;
printf("%d\n", x);
}
}
return 0;
}

2019杭电多校第四场hdu6621 K-th Closest Distance(二分答案+主席树)的更多相关文章

  1. [2019杭电多校第四场][hdu6621]K-th Closest Distance(主席树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6621 题意为求区间[l,r]内第k小|a[i]-p|的值. 可以二分答案,如果二分的值为x,则判断区间 ...

  2. [2019杭电多校第四场][hdu6623]Minimal Power of Prime

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6623 题目大意为求一个数的唯一分解的最小幂次.即120=23*31*51则答案为1. 因为数字太大不能 ...

  3. [2019杭电多校第四场][hdu6616]Divide the Stones

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6616 题意是说n个数分别为1-n,将n个数分成k堆,能否满足每堆个数相等,数值之和相等.保证n%k=0 ...

  4. [2019杭电多校第四场][hdu6614]AND Minimum Spanning Tree(贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6614 题目大意是有一张n个点的完全图,n个点点权为1-n,边权为两点点权按位与(&).求最小生 ...

  5. 2019杭电多校第四场hdu6623 Minimal Power of Prime

    Minimal Power of Prime 题目传送门 解题思路 先打\(N^\frac{1}{5}\)内的素数表,对于每一个n,先分解\(N^\frac{1}{5}\)范围内的素数,分解完后n变为 ...

  6. 杭电多校第四场 Problem K. Expression in Memories 思维模拟

    Problem K. Expression in Memories Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262 ...

  7. 杭电多校第四场 E Matrix from Arrays

    Problem E. Matrix from Arrays Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 ...

  8. 2019杭电多校第七场 HDU - 6656 Kejin Player——概率&&期望

    题意 总共有 $n$ 层楼,在第 $i$ 层花费 $a_i$ 的代价,有 $pi$ 的概率到 $i+1$ 层,否则到 $x_i$($x_i \leq 1$) 层.接下来有 $q$ 次询问,每次询问 $ ...

  9. 2019 杭电多校第八场 HDU - 6665 Calabash and Landlord 两矩形分平面

    题意 给出两个矩形,问这两个矩形把平面分成了几部分. 分析 不需要什么高级技能,只需 “简单” 的分类讨论. (实在太难写了,对拍找出错误都不想改 推荐博客,其中有个很好的思路,即只讨论答案为2,3, ...

随机推荐

  1. E. Covered Points (线段上的整点数)

    题目链接:https://codeforces.com/contest/1036/problem/E 思路:学会了一个在线段上的整数点等于 GCD(x1 - x2, y1 - y2) +  1,然后去 ...

  2. Java DOM解析器 - 查询XML文档

    这是需要我们查询的输入XML文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <?xml version="1.0"?> ...

  3. Android/IOS APP界面设计之尺寸规范

    1.尺寸以及分辨率 iPhone的界面尺寸不用多说,640*960是基本OK的,也可以是适应5S的640*1136,马上iPhone 6也快来了(随便吐槽一下网上曝的真机谍照,真是丑到离谱...),只 ...

  4. 关于软件IntelliJ IDEA的使用技巧(四)

    二,IntelliJ IDEA的工具栏介绍 2,IntelliJ IDEA菜单栏 (9)Run运行 ✌1.Run'All Features in :src':运行scr中所有的特征 ✌2.Debug  ...

  5. Python面试题之“猴子补丁”(monkey patching)指的是什么?这种做法好吗?

    “猴子补丁”就是指,在函数或对象已经定义之后,再去改变它们的行为. 举个例子: import datetime datetime.datetime.now = lambda: datetime.dat ...

  6. docker--image的获取

    image有几种获取方式: 1.Docker官方提供了一种文件格式:Dockerfile,通过这种格式的文件,我们可以定义一个image,然后通过Dockerfile我们可以构建(build)一个im ...

  7. React 16.4 生命周期

    补一下 React 16.4版本的生命周期图

  8. shell read变量

  9. (二)Django连接本地mysql异常

    Pycharm连接数据库出现错误 管理员身份进入mysql数据库 命令: mysql -u root -p 重新进入mysql 在进入Pycharm发现连接成功

  10. windows更改文件打开方式