【CF】Day71——⭐Codeforces Round 892 (Div. 2) D (二分 + 思维 + 差分模拟区间合并)

article/2025/6/20 12:21:05

D. Andrey and Escape from Capygrad

题目:

 

思路:

很有思维的一题,非常nice

题目给了我们一个很有意思的条件,如果 x 在 l[i] ~ r[i] 之间,那么就可以跳跃到 a[i] ~ b[i] 之间,那么一个很显然的想法,我们可以记录每个区间内的数最远能跳到哪里去,查询时枚举即可

但是这样的做法显然会超时,每次查询都是 n 的复杂度,所以我们得优化一下,那我们来好好利用题意

首先思路没错,那么该如何优化呢?其实我们可以发现一个事情,那就是我们其实可以做一个类似区间合并的操作,因为如果两个a~b区间可以到达,那么这两个区间就是同一个区间

接下来我们考虑如何合并,由于题目给的条件是处于 l`~ r 就能跳跃,那么我们可以选择 l ~ b 这个区间作为合并的区间,为什么呢?因为如果处于 b 之前的点肯定是跳到 b 或者合并的区间更好,而 b 点之后的点不跳跃至 a~b 区间之内可能会更好,所以我们这里合并每个 l ~ b 区间,那么如何合并区间呢?

我们可以使用差分,如果 sum 等于 0,说明合成了一个大区间,否则就继续合并,然后对于合并好的区间我们用一个数组存储起来,那么最后肯定是一个类似下图的模样

即最后的所有区间都不会有交集,对于每个区间我们都记录其 l 和 r

然后就是查询操作了,对于查询操作,我们只需要考虑它在哪个大区间内即可,显然暴力枚举不行,所以我们得考虑优化,可以发现最后的区间的左端点都是单调递增的,所以我们考虑二分

我们找到第一个左端点大于 x 的区间,那么这个区间的前一个的左端点肯定就在 x 左边,然后选择跳or不跳两个操作,即 x = max(x,r),因为我们的 x 值可能大于 r 但小于下一个 l,所以我们得取最大值

小技巧:对于 pair<int,int> 也是可以使用二分的,只不过查询的值也得是 PII 类型,查询规则就是先比第一个,再比第二个

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "Yes\n"
#define no cout << "No\n"
void solve()
{int n;std::cin >> n;vector<pair<int, int>> chafeng;vector<pair<int, int>> allrg;allrg.push_back({ -1,-1 });for (int i = 0; i < n; i++){int l, r;std::cin >> l >> r >> r >> r;chafeng.push_back({ l,1 });chafeng.push_back({ r + 1,-1 });}sort(chafeng.begin(), chafeng.end());int last = 0;while(last != chafeng.size()){int sum = 0;int l = chafeng[last].first;int sta = 0;while (sum != 0 || !sta){sum += chafeng[last].second;last++;sta = 1;}allrg.push_back({l,chafeng[last-1].first-1});}int q;std::cin >> q;for (int i = 0; i < q; i++){int x;std::cin >> x;//确保只和 x 相关pair<int, int> ask = { x, 1e9 + 1 };auto iter = upper_bound(allrg.begin(), allrg.end(), ask);iter--;int ans = max(x, iter->second);cout << ans << ' ';}cout << endl;
}signed main()
{std::cin.tie(0)->sync_with_stdio(false);int t = 1;std::cin >> t;while (t--){solve();}return 0;
}


http://www.hkcw.cn/article/tHBWGmUKOo.shtml

相关文章

C#集合循环删除某些行

你想要在遍历集合&#xff08;例如List&#xff09;的同时删除某些元素时&#xff0c;直接在循环中删除元素可能会导致问题&#xff0c;因为这可能会改变集合的大小和导致索引问题&#xff1b; 可以用for循环的倒序来删除&#xff1b; 如果要删除满足特定条件的所有元素&…

fpga系列 HDL : FPGA实现奇数倍分频

偶分频 //240个时钟周期翻转一次输出&#xff0c;这实际上是一个 480倍分频器 reg [7:0] counter 0; reg divided_clk 1b0; always (posedge clk) beginif (counter 239) begin // 240counter < 0;divided_clk < ~divided_clk; end else begincounter < counter 1…

ICML 2025 Spotlight | 机器人界的「Sora」!让机器人实时进行未来预测和动作执行!

标题&#xff1a;Video Prediction Policy: A Generalist Robot Policy with Predictive Visual Representations 作者&#xff1a;Yucheng Hu, Yanjiang Guo, Pengchao Wang, Xiaoyu Chen, Yen-Jen Wang, Jianke Zhang, Koushil Sreenath, Chaochao Lu, Jianyu Chen 机构&am…

「 扑翼飞行器 」悬停飞行的信号串联滤波器设计

一、前言 小白在设计扑翼飞行器悬停算法过程中,设计了三种滤波器串联使用,总结如下。 二、正文 陷波滤波器 (Notch @30 Hz) 目的:针对扑翼机构或传感系统中常见的机械谐振或结构共振噪声进行有源抑制。 工作原理:在归一化频率 (假设采样率 , HZ)处设计一个陷波(notch)…

RL 基础 (待补充)

注&#xff1a;本文仅用于自学习笔记备忘&#xff0c;不做任何分享和商业用途。 主要参考资料&#xff1a; 蘑菇书EasyRLA (Long) Peek into Reinforcement Learning | LilLog 第1章 强化学习基础 RL算法分类&#xff1a; Model-based: Rely on the model of the environm…

Redis7底层数据结构解析

redisObject 在 Redis 的源码中&#xff0c;Redis 会将底层数据结构&#xff08;如 SDS、hash table、skiplist 等&#xff09;统一封装成一个对象&#xff0c;这个对象叫做 redisObject&#xff0c;也简称 robj。 typedef struct redisObject {unsigned type : 4; // 数…

Kafka 的 ISR 机制深度解析:保障数据可靠性的核心防线

在 Kafka 的消息处理体系中&#xff0c;数据的可靠性和高可用性是至关重要的目标。而 ISR&#xff08;In-Sync Replicas&#xff0c;同步副本&#xff09;机制作为 Kafka 实现这一目标的关键技术&#xff0c;在消息复制、故障容错等方面发挥着核心作用。接下来&#xff0c;我们…

cusor无限续杯

githut开源网址&#xff1a;https://github.com/yuaotian/go- 敲黑板下面是主要步骤和注意事项&#xff01; step1:cursor软件退出登录 step2:cursor网页端删除账号 step3:运行命令&#xff08;注意&#xff1a;用管理员身份运行windows powershell&#xff0c;不能用cmd&…

360浏览器设置主题

设置默认主题&#xff1a; 1.右上角有个皮肤按钮 进来后&#xff0c;右边有个回复默认皮肤按钮。 换成彩色皮肤后&#xff0c;找按钮不太好找了。

DAY 17 常见聚类算法

目录 DAY 17 常见聚类算法1.聚类的指标2.聚类常见算法&#xff1a;kmeans聚类、dbscan聚类、层次聚类3.三种算法对应的流程作业&#xff1a; 对心脏病数据集进行聚类。 DAY 17 常见聚类算法 import seaborn as sns from sklearn.decomposition import PCA from sklearn.prepro…

MySQL存储架构深度解析:从引擎选型到云原生实践(2025最新版)

引言 在数字经济时代&#xff0c;MySQL作为全球使用最广泛的关系型数据库&#xff0c;其存储技术直接影响着全球70%以上互联网企业的数据处理能力。2025年云原生数据库市场规模预计突破$50B&#xff0c;而MySQL存储引擎的选型与优化仍是DBA的核心课题。本文将结合最新行业实践…

Cesium快速入门到精通系列教程

一、打造第一个Cesium应用 1、官方渠道下载Cesium&#xff08;可选择历史版本&#xff09; ​​GitHub Releases页面​​ 访问 Cesium GitHub Releases&#xff0c;此处列出了所有正式发布的版本。 通过标签&#xff08;如 v1.95.0&#xff09;选择目标版本&#xff0c;下载…

Unity 模拟高度尺系统开发详解——实现拖动、范围限制、碰撞吸附与本地坐标轴选择

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity 模拟高度尺系统开发详解——实现拖动、范围限制、碰撞吸附与本地坐标轴选择 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不…

Spark核心:单跳转换率计算全解析

目录 代码功能解释与问题分析 关键问题分析 修正与拓展方案 1. 修正分子计算逻辑 2. 修正分母计算逻辑 3. 完善转换率计算 4. 优化代码结构 5. 性能优化 修正后的代码示例 关键改进点说明 测试与验证建议 package core.reqimport org.apache.spark.rdd.RDD import o…

基于STM32单片机CO气体检测

基于STM32单片机CO检测 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff09; 功能介绍 具体功能&#xff1a; 1.MQ-7传感器检测CO气体浓度&#xff1b; 2.LCD1602实时显示气体浓度及上限值&#xff1b; 3.气体浓度超过设定对应上限值&#xff0c;电机转动&…

MySQL事务

事务&#xff08;Transaction&#xff09;是数据库管理系统中一组操作的集合&#xff0c;作为一个单元要么全部成功&#xff0c;要么全部失败&#xff0c;确保数据的一致性和完整性。它像一个“原子操作单元”&#xff0c;遵循ACID原则&#xff08;原子性、一致性、隔离性、持久…

C# 反射与特性:深入探索运行时类型系统与元数据编程

在C#开发中&#xff0c;我们通常编写静态类型的代码——编译器在编译时就知道所有类型信息。然而&#xff0c;.NET框架提供了一套强大的机制&#xff0c;允许我们在运行时检查、发现和使用类型信息&#xff0c;这就是反射(Reflection)。而与反射密切相关的另一项技术是特性(Att…

腾讯面试手撕题:返回行递增有序矩阵第k小的元素

题目 给定一个n行n列的矩阵&#xff0c;这个矩阵的每一行是递增有序的&#xff0c;求这个矩阵中第k小的元素。 解答 优解 基于二分查找和按行统计小于等于目标值的元素个数。算法的时间复杂度为&#xff0c;其中D是矩阵中元素值域的范围&#xff08;即最大值与最小值的差&a…

【PostgreSQL 02】PostgreSQL数据类型革命:JSON、数组与地理信息让你的应用飞起来

PostgreSQL数据类型革命&#xff1a;JSON、数组与地理信息让你的应用飞起来 关键词 PostgreSQL高级数据类型, JSONB, 数组类型, PostGIS, 地理信息系统, NoSQL, 文档数据库, 空间数据, 数据库设计, PostgreSQL扩展 摘要 PostgreSQL的高级数据类型是其区别于传统关系数据库的核心…

[Windows] 剪映 视频编辑处理

附链接&#xff1a;夸克网盘分享&#xff08;点击蓝色字体自行保存下载&#xff09;