当前位置: 首页 > news >正文

ABC364:D - K-th Nearest(二分)

题目

在一条数线上有 N+QN+Q 个点 A1,…,AN,B1,…,BQA1​,…,AN​,B1​,…,BQ​ ,其中点 AiAi​ 的坐标为 aiai​ ,点 BjBj​ 的坐标为 bjbj​ 。

就每个点 j=1,2,…,Qj=1,2,…,Q 回答下面的问题:

  • 设 XX 是 A1,A2,…,ANA1​,A2​,…,AN​ 中最接近点 BjBj​ 的 kjkj​ -th 点。求点 XX 与 BjBj​ 之间的距离。更正式地说,设 didi​ 是点 AiAi​ 与 BjBj​ 之间的距离。将 (d1,d2,…,dN)(d1​,d2​,…,dN​) 按升序排序,得到序列 (d1′,d2′,…,dN′)(d1′​,d2′​,…,dN′​) 。求 dkj′dkj​′​ .
限制因素
  • 1≤N,Q≤1051≤N,Q≤105
  • −108≤ai,bj≤108−108≤ai​,bj​≤108
  • 1≤kj≤N1≤kj​≤N
  • 所有输入值均为整数。
做法

题目就是让我们求离b的第k近的距离是多少。我们的思路就是给a排序,然后找到b所在的位置,然后往b的左右两边算他的第k近的数。但这样往b的左右两边一个一个看会超时。我们就二分b往两边的距离,看a数组有多少个在b-mid到b+mid的范围内。如果个数小于k,那么范围小了,l=mid,否则r=mid。最后输出r即可。

#include<bits/stdc++.h> 
using namespace std;
int n,q;
long long a[100010];
int main(){scanf("%d%d",&n,&q);for(int i=1;i<=n;i++) scanf("%lld",&a[i]);sort(a+1,a+1+n);for(int i=1;i<=q;i++){long long b;int k;scanf("%lld%d",&b,&k);if(b<=a[1]){//特判cout<<abs(b-a[k])<<endl;continue;}else if(b>=a[n]){cout<<abs(b-a[n+1-k])<<endl;continue;}long long l=-1e18-10,r=1e18+10;//也可以不用这么大,2e8就行while(l+1<r){long long mid=l+(r-l)/2;int id1=lower_bound(a+1,a+1+n,b-mid)-a;int id2=upper_bound(a+1,a+1+n,b+mid)-a;if(id2-id1>=k){r=mid;}else{l=mid;}}cout<<r<<endl;}
}

http://www.lryc.cn/news/408769.html

相关文章:

  • hive中分区与分桶的区别
  • Blender材质-PBR与纹理材质
  • 微软的Edge浏览器如何设置兼容模式
  • SpringBoot开启多端口探究(1)
  • 优化算法:2.粒子群算法(PSO)及Python实现
  • ThreadLocal面试三道题
  • Git操作指令(已完结)
  • 大数据采集工具——Flume简介安装配置使用教程
  • C语言 #具有展开功能的排雷游戏
  • npm publish出错,‘proxy‘ config is set properly. See: ‘npm help config‘
  • Springboot 多数据源事务
  • Python每日学习
  • 数据库 执行sql添加删除字段
  • 前端开发:HTML与CSS
  • ctfshow解题方法
  • 探索 Blockly:自定义积木实例
  • MongoDB教程(二十三):关于MongoDB自增机制
  • 展馆导览系统架构解析,从需求分析到上线运维
  • Servlet详解(超详细)
  • Meta AI引入Imagine Me功能,上传图片输入提示词即可实现个性化照片
  • 常用自启设置
  • 模块与组件、模块化与组件化的理解
  • Rust:cargo的常用命令
  • LeetCode 3106.满足距离约束且字典序最小的字符串:模拟(贪心)
  • Elasticsearch 与 MySQL 在查询和插入性能上的深度剖析
  • day4 vue2以及ElementUI
  • 把redis用在Java项目
  • GORM:优雅的Go语言ORM库
  • Golang | Leetcode Golang题解之第279题完全平方数
  • Oracle系统表空间的加解密