2019 Multi-University Training Contest 4 1008K-th Closest Distance(二分+主席树)
题目链接: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(二分+主席树)的更多相关文章
- Cutting Bamboos(2019年牛客多校第九场H题+二分+主席树)
题目链接 传送门 题意 有\(n\)棵竹子,然后有\(q\)次操作,每次操作给你\(l,r,x,y\),表示对\([l,r]\)区间的竹子砍\(y\)次,每次砍伐的长度和相等(自己定砍伐的高度\(le ...
- [2019杭电多校第四场][hdu6621]K-th Closest Distance(主席树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6621 题意为求区间[l,r]内第k小|a[i]-p|的值. 可以二分答案,如果二分的值为x,则判断区间 ...
- 2019 Nowcoder Multi-University Training Contest 4 E Explorer
线段树分治. 把size看成时间,相当于时间 $l$ 加入这条边,时间 $r+1$ 删除这条边. 注意把左右端点的关系. #include <bits/stdc++.h> ; int X[ ...
- 2019 Nowcoder Multi-University Training Contest 1 H-XOR
由于每个元素贡献是线性的,那么等价于求每个元素出现在多少个异或和为$0$的子集内.因为是任意元素可以去异或,那么自然想到线性基.先对整个集合A求一遍线性基,设为$R$,假设$R$中元素个数为$r$,那 ...
- 2017 Multi-University Training Contest - Team 3 Kanade's trio(字典树+组合数学)
题解: 官方题解太简略了orz 具体实现的方式其实有很多 问题就在于确定A[j]以后,如何找符合条件的A[i] 这里其实就是要提前预处理好 我是倒序插入点的,所以要沿着A[k]爬树,找符合的A[i] ...
- 2019.01.21 bzoj3674: 可持久化并查集加强版(主席树+并查集)
传送门 题意:维护可持久化并查集,支持在某个版本连边,回到某个版本,在某个版本 询问连通性. 思路: 我们用主席树维护并查集fafafa数组,由于要查询历史版本,因此不能够用路径压缩. 可以考虑另外一 ...
- 2019杭电多校第⑨场B Rikka with Cake (主席树,离散化)
题意: 给定一块n*m的矩形区域,在区域内有若干点,每个顶点发出一条射线,有上下左右四个方向,问矩形被分成了几个区域? 思路: 稍加观察和枚举可以发现,区域数量=射线交点数+1(可以用欧拉定理验证,但 ...
- 2019杭电多校第四场hdu6621 K-th Closest Distance(二分答案+主席树)
K-th Closest Distance 题目传送门 解题思路 二分答案+主席树 先建主席树,然后二分答案mid,在l和r的区间内查询[p-mid, p+mid]的范围内的数的个数,如果大于k则说明 ...
- 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 ...
随机推荐
- 前台ajax传数组,后台java接收
后端 //添加 @RequestMapping(value = "checkChoise") @ResponseBody ResultJson checkChoise(@Reque ...
- http常用标签
HTML标签大全(常用) 文本标记语言,即HTML(Hypertext Markup Language),是用于描述网页文档的一种标记语言. HTML之所以称为超文本标记语言,是因为文本中包含了所 ...
- 第四周总结&实验报告二
第四周总结&实验报告二 课程总结 这周我们学习了string类,以及很多string类的很多操作方法,同时string也是一个对象,在用到它时我们首字母需要大写,这周我们还加深了对函数构造的理 ...
- jQuery file upload上传图片的流程
先触发_onChange[jquery.fileupload.js] _onChange: function (e) { var that = this, data = { fileInput: $( ...
- MFC ATL STL概要
MFC-----应用程序框架 ATL-----写COM的利器 STL-----用来写逻辑部分 MFC: MFC的目标是桌面应用,当然也有网络部分但很不充分.MFC是一套APP ...
- fiddler之编辑请求(composer)-发包
在需要针对接口进行发包操作时,可以使用composer标签,去编辑请求内容,进行请求. 界面显示如下: 1.Parsed 在该分页中,选择请求方法.设置请求地址和协议版本,上部分为请求的头信息.下半部 ...
- oracle dis系列课程总结
oracle dis系列课程总结 1 bbed安装和介绍 --1 bbed的安装--(Oracle Block Brower and EDitor Tool) 2 controlfile 丢失的恢复 ...
- HTML真是好东西!
HTML真是好东西! 学习HTML已经两天了,别小看这两天哦,这短短的两天估计要比学校的四周还要长.不仅有教学,还有同学与老师之间的交流,最重要的是自己上机实践的过程.在这个过程中,不仅知道了在HTM ...
- Django框架效率问题的解决方法和总…
由于项目的需要,学习了Django框架,Django框架的MTV很清晰,通过MTV能够很好地了解Django框架的内部机理.但是在使用过程中发现了一个严重的问题,就是当有大量IO(写数据库操作)的时候 ...
- hibernate 2 一对多、多对一 双向映射
多对一或一对多中,在多的一方维护关系效率高 一:java实体类 1.Classes.java package cn.gs.ly.school.entity; import java.util.Set; ...