题目大意

给定一个无限长的的实数轴。给定 n n个互不相同数轴上整数点,表示每个动点的起始位置。每个动点有一个运动方向(向左或向右),以每秒1单位的速度运动。两个动点相遇后,会同时改变运动方向。现有qq个询问,每个询问要求编号为 k k的点在经过tt秒后的位置。

Data Constraint
n,q≤2∗105,t≤109 n,q\leq 2*10^5,t\leq10^9

题解

首先注意两个结论:

  1. 两个点相遇后改变方向可以视为交换点的编号,而点的方向不变按原方向继续运动。
  2. 每个点在数轴上的相对位置是一定不变的。

然后,考虑将运动方向不同的点分成两组。
对于询问编号为 k k的点的位置,我们只需要找到在当前这个时间下与kk相对排名相同的数即可。例如:在初始的时候 k k是从左往右数第xx个点,现在询问 k k,就是要在当前的所有位置中找第xx小的位置。
这个可以二分套二分解决。

时间复杂度: O(nlog2) O(nlog^2)

SRC

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std ;#define N 200000 + 10
typedef long long ll ;
struct Note {int v , h ;Note ( int V = 0 , int H = 0 ) { v = V , h = H ; }
} tp[N] ;int p[N] , d[N] , Rank[N] ;
ll a[N] , b[N] ;
int n , Q , k , t ;
ll ans ;bool cmp( Note a , Note b ) { return a.v < b.v ; }bool Check( ll st ) {int wz = 0 ;int l = 1 , r = a[0] ;while ( l <= r ) {int mid = (l + r) / 2 ;if ( (ll)a[mid] - t <= st ) l = mid + 1 , wz = mid ;else r = mid - 1 ;}if ( wz >= k ) return 1 ;if ( b[k-wz] + t <= st && b[0] >= k - wz ) return 1 ;return 0 ;
}int main() {freopen( "bridge.in" , "r" , stdin ) ;freopen( "bridge.out" , "w" , stdout ) ;scanf( "%d" , &n ) ;for (int i = 1 ; i <= n ; i ++ ) scanf( "%d" , &p[i] ) , tp[i] = Note( p[i] , i ) ;for (int i = 1 ; i <= n ; i ++ ) {scanf( "%d" , &d[i] ) ;if ( d[i] ) b[++b[0]] = p[i] ;else a[++a[0]] = p[i] ;}sort( tp + 1 , tp + n + 1 , cmp ) ;for (int i = 1 ; i <= n ; i ++ ) Rank[tp[i].h] = i ;sort( a + 1 , a + a[0] + 1 ) ;sort( b + 1 , b + b[0] + 1 ) ;scanf( "%d" , &Q ) ;for (int i = 1 ; i <= Q ; i ++ ) {scanf( "%d%d" , &k , &t ) ;k = Rank[k+1] ;ll l = -1e9-5000 , r = 2e9+5000 ;while ( l <= r ) {ll mid = (l + r) / 2 ;if ( Check(mid) ) r = mid - 1 , ans = mid ;else l = mid + 1 ;}printf( "%lld\n" , ans ) ;}return 0 ;
}

以上.

JZOJ4829. 独木桥相关推荐

  1. luogu P1007 独木桥

    二次联通门 : luogu P1007 独木桥 /*luogu P1007 独木桥模拟 */ #include <cstdio>inline int min (int a, int b) ...

  2. 操作系统 第二章【记录型信号量机制、独木桥问题】【MOOC答案】

    目录 第1题 第2题 第3题 第4题 第1题 1( 30分 ) 简述生产者消费者问题的解决方案,并说明用记录型信号量机制解决生产者消费者问题时Wait()操作的次序不当会在什么情况下引发死锁. 得分指 ...

  3. 【机器人】一转眼,波士顿动力 Atlas 机器人又会过独木桥了!|湾区人工智能...

    [导读]过独木桥,踩乱砖块,走猫步,这是波士顿动力的 Atlas 机器人最新学会的能力!在美国人类与机器认知研究所(IHMC)新算法的支持下,Atlas完成了"最难行走实验",成功 ...

  4. 洛谷P1007 独木桥(贪心)

    文章目录 题目背景 题目描述 输入格式 输出格式 输入样例 输出样例 说明 分析 AC的C++代码 题目背景 战争已经进入到紧要时间.你是运输小队长,正在率领运输部队向前线运送物资.运输任务像做题一样 ...

  5. AC日记——独木桥 洛谷 p1007

    题目背景 战争已经进入到紧要时间.你是运输小队长,正在率领运输部队向前线运送物资.运输任务像做题一样的无聊.你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们.士兵 ...

  6. 操作系统独木桥问题解法

    假定有如下独木桥问题:过桥时,同一方向的行人可连续过桥,当某一方有人过桥时,另一方向的行人必须等待:当某一方向无人过桥时,另一方向的行人可以过桥.试用信号量机制解决. 需要设置几个信号量?分别是互斥信 ...

  7. OS_PV操作_4.过独木桥问题

    过独木桥问题 某条河只有一座独木桥(东西向),以便行人过河.现在河的两边都有人要过桥,按照下面规则过桥,为了保证过桥安全,请用P.V操作分别实现正确的管理. 规则: 同一方向的可连续过桥,但可连续过桥 ...

  8. 操作系统(独木桥问题)

    请用信号量解决以下的"过独木桥"问题:同一方向的行人可连续过桥,当某一方向 有人过桥时,另一方向的行人必须等待:当某一方向无人过桥时,另一方向的行人可以过桥 将独木桥的两个方向分别 ...

  9. 操作系统-用信号量解决过独木桥问题

    题:请用信号量解决以下的"过独木桥"问题:同一方向的行人可连续过桥,当某一方向有人过桥时,另一方向的行人必须等待:当某一方向无人过桥时,另一方向的行人可以过桥. 解答: 信号量br ...

最新文章

  1. 创建一个显示所有预定义WPF颜色的ListBox
  2. 雅虎书面问题——最大的问题汇总
  3. 解决js跨域调用WebApi的问题
  4. Opencv轻松入门:OpenCV入门难?资料少?看完这篇文章就稳了
  5. Struts2输入校验
  6. JVM性能调优监控工具使用详解
  7. 【学习生活杂谈】学习记录
  8. excel c# 输出
  9. 像狗皮膏药一样的图片拖拉操作
  10. 4.swift 知识点积累 as 闭包和函数类型
  11. C#中==操作符存在的缺陷
  12. Linux 运维工程师学习成长路线上要经历哪四个阶段?
  13. 基于JavaWeb的小型超市管理系统的设计与实现
  14. 导出文件浏览器不自动下载文件
  15. 教你如何查看已经撤回的微信消息!
  16. 微信内打开的H5页二次分享成卡片模式
  17. 学java难不难?java应该怎么学?
  18. AppScan的许可证
  19. Ceph Octopus新版新功能:图形化Dashboard
  20. 精心整理的MYSQL面试题

热门文章

  1. RICOH处于脱机状态 简单解决
  2. 使用 TensorFlow 2.0 进行分布式训练
  3. USB Type-C拓展DisplayPort and USB2.0(基于PD通讯)
  4. 无挑战,不 Geek!TiDB 性能挑战赛等你来战
  5. 10.设计模式之桥接模式
  6. English语法_方式副词 - almost / nearly
  7. Java宣传推广页地址:
  8. 编写函数求解圆台的表面积s和体积v
  9. 误码率BER计算原理及仿真输出
  10. 【超详细】Windows利用rclone将GoogleDrive等网盘/云盘挂载到本地