题意:

给你一个数组,q次询问,每次问你[l,r]范围内与p距离第k大的元素的与p的距离,强制在线

思路:

主席树提取出[l,r]内的权值线段树,然后二分与p的距离mid

ask该权值线段树里[p-mid,p+mid]的数的个数,使其刚好大于等于k

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<deque>
#include<set>
#include<vector>
#include<map> #define fst first
#define sc second
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define lc root<<1
#define rc root<<1|1 using namespace std; typedef double db;
typedef long double ldb;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PI;
typedef pair<ll,ll> PLL; const db eps = 1e-;
const int mod = 1e9+;
const int maxn = 2e7+2e6+;
const int maxm = 4e6+;
const int inf = 0x3f3f3f3f;
const db pi = acos(-1.0); int ls[maxn],rs[maxn],dat[maxn];
int tot;
int n,q;
int a[maxm];
int root[maxm];
int t;
int insert(int now, int l, int r, int x, int val){
int p = ++tot;
ls[p]=ls[now];rs[p]=rs[now];dat[p]=dat[now];
if(l==r){
dat[p]+=val;
return p;
}
int mid = (l+r)>>;
if(x<=mid)ls[p]=insert(ls[now],l,mid,x,val);
else rs[p]=insert(rs[now],mid+,r,x,val);
dat[p]=dat[ls[p]]+dat[rs[p]];
return p;
}
int ask(int lst, int now, int l, int r, int L, int R){
//printf("%d %d %d %d %d %d\n",lst,now,l,r,L,R);
int mid = (l+r)>>;
int ans = ;
if(L<=l&&r<=R)return dat[now]-dat[lst];
if(L<=mid)ans+=ask(ls[lst],ls[now],l,mid,L,R);
if(mid<R)ans+=ask(rs[lst],rs[now],mid+,r,L,R);
return ans;
}
int K,p;
bool cmp(int a, int b){
return abs(a-p)<abs(b-p);
} int main(){
scanf("%d", &t); while(t--){
int lstans = ;
mem(dat,);
tot=;
scanf("%d %d", &n, &q);
for(int i = ; i <= n; i++){
scanf("%d", &a[i]);
root[i]=insert(root[i-],,,a[i],);
} while(q--){
int l, r;
scanf("%d %d %d %d", &l, &r, &p, &K);
l^=lstans;
r^=lstans;
p^=lstans;
K^=lstans;
int ans;
int L = ;
int R = ;
while(L<=R){
int mid = (L+R)>>;
int res = ask(root[l-],root[r],,,max(,p-mid),min(,p+mid));
if(res>=K){
ans=mid;
R=mid-;
}
else L=mid+;
}
lstans=ans;
printf("%d\n",ans); }
}
return ;
}
/*
1
5 2
31 2 5 45 4
1 5 5 1
2 5 3 2 */

HDU 6521 K-th Closest Distance (主席树+二分)的更多相关文章

  1. HDU - 6621 K-th Closest Distance 主席树+二分答案

    K-th Closest Distance 主席树第二波~ 题意 给你\(n\)个数\(m\)个询问,问\(i\in [l,r]\)计算每一个\(|a_{i}-p|\)求出第\(k\)小 题目要求强制 ...

  2. 2019HDU多校第四场 K-th Closest Distance ——主席树&&二分

    题意 给定 $n$ 个数,接下来有 $q$ 次询问,每个询问的 $l, r, p, k$ 要异或上一次的答案,才是真正的值(也就是强制在线).每次询问,输出 $[l, r]$ 内第 $k$ 小的 $| ...

  3. HDU6621 K-th Closest Distance HDU2019多校训练第四场 1008(主席树+二分)

    HDU6621 K-th Closest Distance HDU2019多校训练第四场 1008(主席树+二分) 传送门:http://acm.hdu.edu.cn/showproblem.php? ...

  4. POJ 6621: K-th Closest Distance(主席树 + 二分)

    K-th Closest Distance Time Limit: 20000/15000 MS (Java/Others)    Memory Limit: 524288/524288 K (Jav ...

  5. 计蒜客 38229.Distance on the tree-1.树链剖分(边权)+可持久化线段树(区间小于等于k的数的个数)+离散化+离线处理 or 2.树上第k大(主席树)+二分+离散化+在线查询 (The Preliminary Contest for ICPC China Nanchang National Invitational 南昌邀请赛网络赛)

    Distance on the tree DSM(Data Structure Master) once learned about tree when he was preparing for NO ...

  6. HDU - 4866 主席树 二分

    题意:在x轴\([1,X]\)内的上空分布有n个占据空间\([L_i,R_i]\),高度\(D_i\)的线段,射中线段的得分为其高度,每次询问从x轴的\(x\)往上空射的最近k个线段的总得分,具体得分 ...

  7. 2018湘潭邀请赛C题(主席树+二分)

    题目地址:https://www.icpc.camp/contests/6CP5W4knRaIRgU 比赛的时候知道这题是用主席树+二分,可是当时没有学主席树,就连有模板都不敢套,因为代码实在是太长了 ...

  8. BZOJ.1926.[SDOI2010]粟粟的书架(前缀和 主席树 二分)

    题目链接 题意: 在给定矩形区域内找出最少的数,满足和>=k.输出数的个数.两种数据范围. 0~50 注意到(真没注意到...)P[i,j]<=1000,我们可以利用前缀和预处理. num ...

  9. HDU6621 K-th Closest Distance 第 k 小绝对值(主席树(统计范围的数有多少个)+ 二分 || 权值线段树+二分)

    题意:给一个数组,每次给 l ,r, p, k,问区间 [l, r] 的数与 p 作差的绝对值的第 k 小,这个绝对值是多少 分析:首先我们先分析单次查询怎么做: 题目给出的数据与多次查询已经在提示着 ...

随机推荐

  1. structs2的048漏洞复现 2.3.32版本

    S2-048 远程代码执行漏洞 影响版本: 2.0.0 - 2.3.32 之前在网上说只要时2.3.*的版本都有这个漏洞,自己装了个2.3.34的试了几次都没有执行 然后下载了找到了这篇文章才知道影响 ...

  2. CI框架获取post和get参数_CodeIgniter使用心得

    请参考:CI文档的输入类部分: $this->input->post()$this->input->get() -------------------------------- ...

  3. 【阿里云IoT+YF3300】11.物联网多设备快速通信级联

    我们见到的很多物联网设备,大都是“一跳”上网,所谓的“一跳”就是设备直接上网,内嵌物联网模块或者通过DTU直接上网.其实稍微复杂的物联网现场,往往网关下面连接若干物联网设备(如下图),并且这些物联网设 ...

  4. 1、Vue 实战-入门篇

    先决条件:需要 Node.js . npm 基础. 如果没有基础看先看下面简单的两点介绍. 1.npm 命令介绍. 1.所有命令  -h 可以查看.也可以从官网查 docs,结果如下. --help ...

  5. GB国标编码的程序出现乱码

  6. 状态压缩 hdu #10

    You are playing CSGO. There are n Main Weapons and m Secondary Weapons in CSGO. You can only choose ...

  7. 使用zipwithindex 算子给dataframe增加自增列 row_number函数实现自增,udf函数实现自增

    DataFrame df = ...StructType schema = df.schema().add(DataTypes.createStructField("id", Da ...

  8. LeetCode 第17题--电话号码的组合(DFS)

    1. 题目 2.题目分析与思路 3.代码 1. 题目 输入:"23" 输出:["ad", "ae", "af", &qu ...

  9. asp.net生成店铺推广二维码,二维码中间加logo(源码)

    二维条码比一维条码记载数据量更多,二维码条码是一种高密度.高信息含量的便携式数据文件,是实现证件及卡片等大容量.高可靠性信息自动存储.携带并可用机器自动识读的理想手段.而且可以记载更复杂的数据,比如图 ...

  10. Java对接微信公众号模板消息推送

    内容有点多,请耐心! 最近公司的有这个业务需求,又很凑巧让我来完成: 首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offi ...