D. Andrey and Escape from Capygrad Round 892 (Div. 2) 1859D

Problem - D - Codeforces

题目大意:在一个从0到1e9的数轴上,有n个传送门,每个传送门有4个参数,l,r,a,b,可以从[l,r]之间的任意内进入传送门,并传送到[a,b]之间的任意位置,[l,r]一定包含[a,b],有q个起始位置,问从每个位置出发能到达的最远位置是哪

1<=n<=2e5;1<=l<=a<=b<=r<=1e9;1<=q<=2e5

思路:因为我们要走到最远的位置,所以如果我们在某一个传送门的[b,r]范围内,那么我们肯定不会用这个传送门,在原地不动就是最远位置,如果我们要用这个传送门,我们也肯定只会传送到b的位置,即这个传送门能到达的最远位置,所以其实对于某一个传送门,我们只要在[l,b]的范围内,就能到达b,r和a其实是无关项。

这样的话每个传送门就变成了一个很普通的[l,r]区间,r即为原来的b,因为我们可以无限利用传送门,所以相交的传送门可以合并

 例如上图这两个传送门,[l2,b2]、[l1,b1],因为我们只要能进其中一个传送门,就一定能进另一个,所以我们只要在[l2,b1]的范围内,就可以到达b1的位置,也就是这两个区间合并成了[l2,b1]这样一个新区间。

我们将所区间都合并完成后,任意两个区间都没有重合,这样对于每个起始位置,我门就可以用二分找到他属于哪个区间,他能到达的最远位置也就是区间的右端点,如果不在任何区间内,原地不动就是最远

//#include<__msvc_all_public_headers.hpp>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 5;
const int INF = 0x7fffffff;
const int MOD = 998244353;
int n;
pair<int, int>p[N];
void solve()
{cin >> n;init();for (int i = 1; i <= n; i++){int a, b, c, d;cin >> a >> b >> c >> d;p[i] = { a,d } ;}sort(p + 1, p + n + 1);//将所有原区间按从小到大排序int ma = 0;vector<pair<int, int>>por;for (int i = 1; i <= n; i++){		if (p[i].first > ma){//当前区间的左端点超过了当前记录的最远位置por.push_back(p[i]);//记录新区间ma = max(ma, p[i].second);}else{//当前区间和之前记录的区间有重合if (p[i].second <= ma)continue;//被包含的直接不管pair<int, int>temp = por.back();por.pop_back();por.push_back({ temp.first,p[i].second });//合并这两个区间ma=p[i].second;}}int q;cin >> q;for (int i = 1; i <= q; i++){int x;cin >> x;int l = 0, r = por.size() - 1, mid;int ans = x;//最远距离初始化为当前位置while (l <= r){//二分查找当前位置在哪个区间mid = (l + r) >> 1;int nl = por[mid].first;int nr = por[mid].second;if (nr >= x && nl <= x){ans = por[mid].second;break;}if (nr < x){l = mid + 1;}else if (nl > x){r = mid - 1;}}cout << ans << " ";}cout << endl;return;
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t;cin >> t;while (t--){solve();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/66044.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot系列---【SpringBoot在多个profiles环境中自由切换】

SpringBoot在多个profiles环境中自由切换 1.在resource目录下新建dev&#xff0c;prod两个目录&#xff0c;并分别把dev环境的配置文件和prod环境的配置文件放到对应目录下&#xff0c;可以在配置文件中指定激活的配置文件&#xff0c;也可以默认不指定。 2.在pom.xml中最后位置…

竞赛项目 疫情数据分析与3D可视化 - python 大数据

文章目录 0 前言1 课题背景2 实现效果3 设计原理4 部分代码5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 大数据全国疫情数据分析与3D可视化 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff0…

性价比最高的护眼灯,护眼台灯应该怎么挑选

随着技术的发展&#xff0c;灯光早已成为每家每户都需要的东西。但是灯光不好可能会对眼睛造成伤害是很多人没有注意到的。现在随着护眼灯产品越来越多&#xff0c;市场上台灯的选择越来越多样化&#xff0c;如何选择一个对眼睛无伤害、无辐射的台灯成为许多家长首先要考虑的问…

在线吉他调音

先看效果&#xff08;图片没有声&#xff0c;可以下载源码看看&#xff0c;比这更好~&#xff09;&#xff1a; 再看代码&#xff08;查看更多&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&quo…

AtCoder Beginner Contest 314

A.直接模拟就行 #include <bits/stdc.h> using namespace std; const int N 2e510; #define int long long int n,m; string s"3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679";void solve(){cin…

10-1_Qt 5.9 C++开发指南_Data Visualization实现数据三维显示

Data Visualization 是 Qt 提供的用于数据三维显示的模块。在 Qt 5.7 以前只有商业版才有此模块&#xff0c;而从Qt5.7 开始此模块在社区版本里也可以免费使用了。Data Visualization 用于数据的三维显示&#xff0c;包括三维柱状图、三维空间散点、三维曲面等。Data Visualiza…

Idea报错:Cannot resolve symbol “springframework“以及各种依赖包

问题描述&#xff1a; Idea导入了maven项目之后出现报错Cannot resolve symbol “springframework” &#xff0c;识别不了这个标识或者找不到这个包&#xff0c;明明这些依赖和包都有就是出现报错&#xff0c;并且运行按钮变成灰色 解决办法&#xff1a; 其实这个原因大概率就…

SQL SERVER 异地备份到远程共享文件夹异常处理

SQL SERVER 异地备份到远程共享文件夹异常处理 SQL Server 异地备份到远程共享文件夹异常处理 - 灰信网&#xff08;软件开发博客聚合&#xff09; -- 允许配置高级选项 EXEC sp_configure show advanced options, 1 GO -- 重新配置 RECONFIGURE GO -- 启用xp_cmdshell EXEC sp…

【算法基础20-单调栈】

算法原理: 用单调递增栈&#xff0c;当该元素可以入栈的时候&#xff0c;栈顶元素就是它左侧第一个比它小的元素。 以&#xff1a;3 4 2 7 5 为例&#xff0c;过程如下&#xff1a; 动态模拟过程 题目&#xff1a; 给定一个长度为 N 的整数数列&#xff0c;输出每个数左边第一…

Design-Pattern设计模式

Design-Pattern设计模式 图说设计模式 图说设计模式 在线书籍 软件模式是将模式的一般概念应用于软件开发领域&#xff0c;即软件开发的 总体指导思路或参照样板。软件模式并非仅限于设计模式&#xff0c;还包括 架构模式、分析模式和过程模式等&#xff0c;实际上&#xff…

【JVM】JVM中的分代回收

文章目录 分代收集算法什么是分代分代收集算法-工作机制MinorGC、 Mixed GC 、 FullGC的区别是什么 分代收集算法 什么是分代 在java8时&#xff0c;堆被分为了两份&#xff1a; 新生代和老年代【1&#xff1a;2】 其中&#xff1a; 对于新生代&#xff0c;内部又被分为了三…

leetcode 力扣刷题 滑动窗口 部分题解(记录)

力扣刷题 滑动窗口相关的部分题解 209. 长度最小的子数组904. 水果成篮76. 最小覆盖子串 209. 长度最小的子数组 leetcode题目链接 209.长度最小的子数组 题目内容是这样的&#xff1a;给定一个含有 n个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的…