2019HDU多校 Round4
08 K-th Closest Distance
题意:询问区间l,r中与数p的距离为第k大的数 求这个距离
题解:很裸的主席树 二分答案 然后可以用主席数判断在这个区间内 一段值域内出现的数
之前没写过主席树求 统计小于区间某个数的个数 自作主张写的二分区间k小 loglog tle死
看了汪聚聚的代码 才明白主席树功能的强大 以后会了
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5; int n, m, cnt, len;
int a[MAXN];
int b[MAXN];
int sum[MAXN << 5];
int ls[MAXN << 5];
int rs[MAXN << 5];
int t[MAXN]; int build(int l, int r) {
int rt = ++cnt;
int m = l + r >> 1;
sum[rt] = 0; if(l < r) {
ls[rt] = build(l, m);
rs[rt] = build(m + 1, r);
}
return rt;
} int add(int o, int l, int r, int k) {
int rt = ++cnt;
int m = l + r >> 1;
ls[rt] = ls[o]; rs[rt] = rs[o]; sum[rt] = sum[o] + 1; if(l < r) {
if(k <= m) ls[rt] = add(ls[o], l, m, k);
else rs[rt] = add(rs[o], m + 1, r, k);
}
return rt;
} int query(int x, int y, int l, int r, int ql, int qr) {
if(ql <= l && qr >= r) return sum[y] - sum[x]; int res = 0;
int m = l + r >> 1;
if(ql <= m) res += query(ls[x], ls[y], l, m, ql, qr);
if(qr > m) res += query(rs[x], rs[y], m + 1, r, ql, qr);
return res;
} bool check(int ql, int qr, int x, int y, int k) {
int t1 = lower_bound(b + 1, b + 1 + len, ql) - b;
int t2 = lower_bound(b + 1, b + 1 + len, qr + 1) - b - 1; if(t1 > t2 || t2 > len || t1 > len) return 0;
int tmp = query(t[x - 1], t[y], 1, len, t1, t2);
if(tmp >= k) return 1;
else return 0;
} int main() {
int T;
scanf("%d", &T);
while(T--) {
scanf("%d%d", &n, &m);
cnt = 0;
for(int i = 1; i <= n; i++) scanf("%d", &a[i]), b[i] = a[i];
sort(b + 1, b + 1 + n);
len = unique(b + 1, b + 1 + n) - b - 1; t[0] = build(1, len);
for(int i = 1; i <= n; i++) {
int tt = lower_bound(b + 1, b + 1 + len, a[i]) - b;
t[i] = add(t[i - 1], 1, len, tt);
} int x = 0;
for(int i = 1; i <= m; i++) {
int l, r, p, k;
scanf("%d%d%d%d", &l, &r, &p, &k);
l ^= x, r ^= x, p ^= x, k ^= x; int l1 = 0, r1 = 1e6;
int mid = l1 + r1 >> 1;
while(l1 + 1 < r1) {
mid = l1 + r1 >> 1;
if(check(p - mid, p + mid, l, r, k)) r1 = mid;
else l1 = mid;
}
if(check(p - l1, p + l1, l, r, k)) x = l1;
else x = r1;
printf("%d\n", x);
}
}
return 0;
}
K-th Closest Distance
2019HDU多校 Round4的更多相关文章
- HDU6578 2019HDU多校训练赛第一场 1001 (dp)
HDU6578 2019HDU多校训练赛第一场 1001 (dp) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 你有n个空需要去填,有 ...
- HDU6579 2019HDU多校训练赛第一场1002 (线性基)
HDU6579 2019HDU多校训练赛第一场1002 (线性基) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6579 题意: 两种操作 1.在序列末 ...
- 2019HDU多校第一场1001 BLANK (DP)(HDU6578)
2019HDU多校第一场1001 BLANK (DP) 题意:构造一个长度为n(n<=10)的序列,其中的值域为{0,1,2,3}存在m个限制条件,表示为 l r x意义为[L,R]区间里最多能 ...
- 2019HDU多校训练第三场 Planting Trees 暴力 + 单调队列优化
题意:有一个n * n的网格,每个网格中间有一颗树,你知道每棵树的高,你可以选择一个矩形区域把里面的树都围起来,但是矩形区域里面任意两棵树的高度差的绝对值不超过m,问这个矩形的最大面积是多少? 思路: ...
- 2019牛客多校 Round4
Solved:3 Rank:331 B xor 题意:5e4个集合 每个集合最多32个数 5e4个询问 询问l到r个集合是不是都有一个子集的xor和等于x 题解:在牛客多校第一场学了线性基 然后这个题 ...
- 2017多校Round4(hdu6067~hdu6079)
补题进度:10/13 1001 待填坑 1002(kmp+递推) 题意: 有长度为n(<=50000)的字符串S和长度为m(m<=100)的字符串T,有k(k<=50000)组询问, ...
- 2019HDU多校第九场 Rikka with Quicksort —— 数学推导&&分段打表
题意 设 $$g_m(n)=\begin{cases}& g_m(i) = 0, \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ...
- 2019HDU多校第7场——构造
题意 假设现在你在准备考试,明天的考试有 $n$ 道题目,对于分值为 $i$ 的题目至少复习 $i+1$ 小时才能做对,已知总分为$m$,求确保完成 $k$ 道题的最少时间. 分析 手动尝试一下,发现 ...
- 2019HDU多校第六场1009 Three Investigators——杨表
题意 给定一个 n 个元素的数列,从前 k 个元素中取5次不下降子序列,求取得的和的最大值(k从1至n) 分析 考虑将数字 a[i] 拆成 a[i] 个 a[i],比如 “4,1,2”→“4,4,4, ...
随机推荐
- 2020DevOps状态报告——变更管理
如果你的公司还没有走向平台化,现在仍然可以是很大的飞跃.您仍然可以通过解决公司的变更管理流程来加快软件交付.在本章中,我们将研究我们在公司内部所学的变更管理模式.我们将向您展示什么是有效的,什么是无效 ...
- SpringBoot魔法堂:@MatrixVariable参数注解使用详解
前言 RFC3986定义URI的路径(Path)中可包含name-value片段,扩充了以往仅能通过查询字符串(Query String)设置可选参数的囧境. 假如现在需要设计一个用于"搜索 ...
- python学习笔记 | macOS Big Sur动态壁纸食用指南
目录 前言 爬虫篇 壁纸使用篇 后记 前言 北京时间23日凌晨1点,苹果WWDC2020大会开幕.在发布会上,苹果正式发布了新版macOS,并将其命名为"Big Sur". 相比于 ...
- 剑指 Offer 27. 二叉树的镜像
同LeetCode226翻转二叉树 1 class Solution { 2 public: 3 TreeNode* mirrorTree(TreeNode* root) { 4 if(root == ...
- os-hackos-3-docker提权
0x00 cewl http://192.168.43.179/websec/爬取页面所有的单词做成字典 hydra -l contact@hacknos.com -P cewl.txt 192.16 ...
- 强制删除 Terminating 状态的pod
[root@k8s-master coredns]# kubectl get podNAME READY STATUS RESTARTS ...
- 二进制部署kubernetes
Kubernetes二进制安装 环境准备: 主机环境:做好主机名hosts文件映射 硬件2cpu 2G内存 192.168.30.21 k8s-master 192.168.30.22 k8s-no ...
- oracle dg库因为standby_file_management参数导致应用停止
DG库的standby_file_management=manual,主库添加文件的时候,备库无法自动创建对应的文件而报错 File #154 added to control file as 'UN ...
- 2.4V升5V芯片,8uA功耗,低功耗升压电路图
2.4V升5V,可用于USB拔插充电,也可以用于把两节镍氢电池2.4V升压到5V,的固定输出稳压电压值,同时输出电流可达1A,0.5A等 首先是先说下0.5A的这款的话,是比较低功耗的,8uA左右的输 ...
- 浅谈java中线程和操作系统线程
在聊线程之前,我们先了解一下操作系统线程的发展历程,在最初的时候,操作系统没有进程线程一说,执行程序都是串行方式执行,就像一个队列一样,先执行完排在前面的,再去执行后面的程序,这样的话很多程序的响应就 ...