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. 百度之星资格赛2018B题-子串查询

    子串查询 题目 度度熊的字符串课堂开始了!要以像度度熊一样的天才为目标,努力奋斗哦! 为了检验你是否具备不听课的资质,度度熊准备了一个只包含大写英文字母的字符串 A[1,n]=a1a2⋯an,接下来他 ...

  2. 【扩展lucas定理】

    洛谷模板题面:https://www.luogu.org/problemnew/show/P4720 扩展卢卡斯被用于解决模数为合数情形下的组合数问题. 首先我们把模数mod质因数分解,解决模每个素数 ...

  3. UVA11134_Fabled Rooks

    大概题意: 在n*n的棋盘上面放n个车,能否使他们互相不攻击(即不能在同一行一列),并且第i个车必须落在第i的矩形范围(xl,yl, xr,yr)之内 xy互相并不干扰,所以就可以把这个二维问题压缩成 ...

  4. sql合并字段

    <!-- 对发送方式合并查询 --> <!--查询所有满足条件的营销活动 --> <select id="CRM-MK-ACT-DEFINE-SELECT&qu ...

  5. MySQL总结01

    window删除MySQL服务 cmd下执行 sc delete MySQL 登陆登出 登陆: mysql -uroot -ppasswd -h host 退出登陆 mysqladmin -uroot ...

  6. zabbix监控linux内存

    通过free -m查看当前内存 可用内存:Available memory=free+buffers+cached,即31068=759+66+30243 已用内存:Used memory=used- ...

  7. flask获取参数

    <!DOCTYPE html> body, html { width: 100%; height: 100%; } , ::after, ::before { -webkit-box-si ...

  8. Java原理领悟-JMM(java内存模型认知)

    总线锁.缓存锁.MESI缓存一致性协议.CPU 层面的内存屏障 1.JMM定义: Java Memory Model(java内存模型)是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见 ...

  9. ionic3 emoj表情包插件 emoji-picker

    1.效果演示: 2.安装扩展包依赖 npm i @ionic-tools/emoji-picker --save 3.app.module.ts中导入插件 import { EmojiPickerMo ...

  10. WPF textbox 鼠标滚动更新日期,text文本值更改

    /// <summary> /// 选择日期 /// </summary> private void RQTxt_MouseWheel(object sender, Mouse ...