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

题目大意:给一个数组,每次给 l ,r, p, k,问区间 [l, r] 的数与 p 的绝对值的第 k小的数是哪个

解题思路:可以二分mid,然后判断在[l,r]区间内是否刚好有k个数大于等于p-mid,小于等于p+mid,判断的话可以直接用主席树,用主席树可以查找出小于等于某个数的个数,找到小于p+mid的个数-小于等于p-mid-1的个数,即为区间[l,r]内小于等于p+mid且大于p-mid的个数。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=;
int n,m,cnt,root[maxn],a[maxn];
struct node{
int l,r,sum;
}T[maxn*];
vector<int> v;
int getid(int x){
return lower_bound(v.begin(),v.end(),x)-v.begin()+;
}
void update(int &now,int pre,int l,int r,int pos){
T[++cnt]=T[pre],T[cnt].sum++,now=cnt;
if(l==r) return;
int mid=(l+r)/;
if(pos<=mid) update(T[now].l,T[pre].l,l,mid,pos);
else update(T[now].r,T[pre].r,mid+,r,pos);
}
int query(int l,int r,int x,int y,int k){
if(l==r) return T[y].sum-T[x].sum;
int mid=(l+r)/,ans=;
if(k<=mid) ans+=query(l,mid,T[x].l,T[y].l,k);
else{
ans+=T[T[y].l].sum-T[T[x].l].sum;
ans+=query(mid+,r,T[x].r,T[y].r,k);
}
return ans;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
cnt=; v.clear();
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&a[i]),v.push_back(a[i]);
sort(v.begin(),v.end()),v.erase(unique(v.begin(),v.end()),v.end());
for(int i=;i<=n;i++) update(root[i],root[i-],,n,getid(a[i]));
int tmp=;
while(m--){
int L,R,k,p;
scanf("%d%d%d%d",&L,&R,&p,&k);
L^=tmp; R^=tmp; p^=tmp; k^=tmp;
int l=,r=1e6+,ans;
while(l<=r){
int mid=(l+r)/;
int l1=upper_bound(v.begin(),v.end(),p-mid-)-v.begin(),r1=upper_bound(v.begin(),v.end(),p+mid)-v.begin();
int x1,x2;
if(l1==) x1=;
else x1=query(,n,root[L-],root[R],l1);
if(r1==) x2=;
else x2=query(,n,root[L-],root[R],r1);
if(x2-x1>=k){
ans=mid;
r=mid-;
}else l=mid+;
}
printf("%d\n",ans);
tmp=ans;
}
}
return ;
}

2019 Multi-University Training Contest 4 1008K-th Closest Distance(二分+主席树)的更多相关文章

  1. Cutting Bamboos(2019年牛客多校第九场H题+二分+主席树)

    题目链接 传送门 题意 有\(n\)棵竹子,然后有\(q\)次操作,每次操作给你\(l,r,x,y\),表示对\([l,r]\)区间的竹子砍\(y\)次,每次砍伐的长度和相等(自己定砍伐的高度\(le ...

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

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

  3. 2019 Nowcoder Multi-University Training Contest 4 E Explorer

    线段树分治. 把size看成时间,相当于时间 $l$ 加入这条边,时间 $r+1$ 删除这条边. 注意把左右端点的关系. #include <bits/stdc++.h> ; int X[ ...

  4. 2019 Nowcoder Multi-University Training Contest 1 H-XOR

    由于每个元素贡献是线性的,那么等价于求每个元素出现在多少个异或和为$0$的子集内.因为是任意元素可以去异或,那么自然想到线性基.先对整个集合A求一遍线性基,设为$R$,假设$R$中元素个数为$r$,那 ...

  5. 2017 Multi-University Training Contest - Team 3 Kanade's trio(字典树+组合数学)

    题解: 官方题解太简略了orz 具体实现的方式其实有很多 问题就在于确定A[j]以后,如何找符合条件的A[i] 这里其实就是要提前预处理好 我是倒序插入点的,所以要沿着A[k]爬树,找符合的A[i] ...

  6. 2019.01.21 bzoj3674: 可持久化并查集加强版(主席树+并查集)

    传送门 题意:维护可持久化并查集,支持在某个版本连边,回到某个版本,在某个版本 询问连通性. 思路: 我们用主席树维护并查集fafafa数组,由于要查询历史版本,因此不能够用路径压缩. 可以考虑另外一 ...

  7. 2019杭电多校第⑨场B Rikka with Cake (主席树,离散化)

    题意: 给定一块n*m的矩形区域,在区域内有若干点,每个顶点发出一条射线,有上下左右四个方向,问矩形被分成了几个区域? 思路: 稍加观察和枚举可以发现,区域数量=射线交点数+1(可以用欧拉定理验证,但 ...

  8. 2019杭电多校第四场hdu6621 K-th Closest Distance(二分答案+主席树)

    K-th Closest Distance 题目传送门 解题思路 二分答案+主席树 先建主席树,然后二分答案mid,在l和r的区间内查询[p-mid, p+mid]的范围内的数的个数,如果大于k则说明 ...

  9. HDU校赛 | 2019 Multi-University Training Contest 4

    2019 Multi-University Training Contest 4 http://acm.hdu.edu.cn/contests/contest_show.php?cid=851 100 ...

随机推荐

  1. iOS 自定义一对UI表现相反的按钮

    假如有一对按钮[重置][提交],要让他们的默认UI和点击的UI表现刚好相反 [提交]按钮,默认橙色,点击边框是橙色,字体是橙色,背景变白色 [重置]按钮,默认白色橙色,边框是橙色,点击字体是白色,背景 ...

  2. 第五周总结&实验报告三

    第五周总结&实验报告三 实验报告 1.已知字符串:"this is a test of java".按要求执行以下操作:(要求源代码.结果截图.) ① 统计该字符串中字母s ...

  3. Mybaits查询返回值是List类型的

    查询返回值是list类型的 1 首先在接口中写方法 public interface EmployeeMapper { public List<Employee> getEmpsByLas ...

  4. 转:C语言inline详细讲解

    本文介绍了GCC和C99标准中inline使用上的不同之处.inline属性在使用的时候,要注意以下两点:inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而 ...

  5. docker中 devicemapper驱动挂载容器镜像文件

    详解docker中容器devicemapper设备的挂载流程

  6. Octavia 创建 Listener、Pool、Member、L7policy、L7 rule 与 Health Manager 的实现与分析

    目录 文章目录 目录 创建 Listener 创建 Pool 创建 Member CalculateDelta HandleNetworkDeltas AmphoraePostNetworkPlug ...

  7. 中国MOOC_零基础学Java语言_第2周 判断_1时间换算

    第2周编程题 查看帮助 返回   第2周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截 ...

  8. 【MM系列】SAP MM模块-关于批次特性的查看和获取

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-关于批次特性的查看 ...

  9. C++——堆、栈与内存管理

    简介 Stack,是存在于某作用域(scope) 的一块内存空间(memory space).例如当你调用函数,函数本身即会形成一个stack 用來放置它所接收的参数,以及返回地址.在函数本体(fun ...

  10. 【Linux开发】OpenCV在ARM上的移植

    与X86 Linux类似,请参考:Linux 下编译安装OpenCV 本文在此基础上进行进一步操作. 网络上很多移植编译的方法比较老,多数针对OpenCV 1.0,而且方法很麻烦,不仔细操作很容易出错 ...