K-th Closest Distance
Posted 2462478392lee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K-th Closest Distance相关的知识,希望对你有一定的参考价值。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6621
题意:
对于每个查询,都会给您一个间隔[L,R]和两个数字p和K。您的目标是找到p和aL,aL+1,…,aR之间的第K个最近距离。
p和ai之间的距离等于| p-ai |。
思路:直接建树,二分绝对值ans,让主席树查找[p-ans,p+ans]之间的数是不是又k个,如果是,那么答案就是ans。
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<map> #include<vector> #include<queue> #include<cmath> #define ll long long using namespace std; const int N=1e5+10; const int M=1e6; struct node { int l, r; int val; }tree[N*55]; int root[N], tot; int n,q,a[N]; int update(int pre, int pl, int pr, int val) { int cur = ++tot; tree[cur] = tree[pre]; tree[cur].val ++; if(pl == pr) return cur; int mid = (pl + pr) >> 1; if(val <= mid) tree[cur].l = update(tree[pre].l, pl, mid, val); else tree[cur].r = update(tree[pre].r, mid + 1, pr, val); return cur; } int k, cnt; int query(int pl, int pr, int l, int r, int rt, int lt) { if(pl <= l && r <= pr) { return tree[rt].val - tree[lt].val; } int mid = (l + r) >> 1; int res = 0; if(pl <= mid) res += query(pl, pr, l, mid, tree[rt].l, tree[lt].l); if(pr > mid) res += query(pl, pr, mid + 1, r, tree[rt].r, tree[lt].r); return res; } int main() { int T, ans; int l, r, p; int pl, pr, mid; scanf("%d", &T); while(T--) { scanf("%d%d", &n, &q); for(int i = 1; i <= n; i++) { scanf("%d", &a[i]); root[i] = update(root[i - 1], 1, M, a[i]); } ans = 0; while(q--) { scanf("%d%d%d%d", &l, &r, &p, &k); l = l ^ ans; r = r ^ ans; p = p ^ ans; k = k ^ ans; pl = 0, pr = M; while(pl<=pr) { mid = (pl + pr) >> 1; if(query(max(1, p - mid), min(M, p + mid), 1, M, root[r], root[l - 1]) >= k) { ans = mid; pr = mid - 1; } else pl = mid + 1; } printf("%d ", ans); } } return 0; }
以上是关于K-th Closest Distance的主要内容,如果未能解决你的问题,请参考以下文章
2019杭电多校第四场hdu6621 K-th Closest Distance(二分答案+主席树)
HDU - 6621 K-th Closest Distance 主席树+二分答案
2019杭电多校第三场 1008 K-th Closest Distance
[hdu-6621]K-th Closest Distance 主席树 线段树 2019 多校4
2019 Multi-University Training Contest 4 - K-th Closest Distance