Codeforces Round 904 (Div. 2) C
C. Medium Design
思路:我们设最大值所在的下标为 x x x,最小值所在的下标为 y y y,那么我们考虑一段区间对于答案的贡献:
若一段区间覆盖了 x x x,但没有覆盖 y y y,那么这段区间需要选择
若一段区间覆盖了 y y y,但没有覆盖 x x x,那么这段区间不选择
若一段区间覆盖了 x x x,并且覆盖了 y y y,那么这段区间选或者不选都可以
若一段区间对于 x x x, y y y都未曾覆盖,那么这段区间同样选或是不选都可以
所以我们发现,真正需要进行判断的只有前两种情况,那么我们考虑极端情况,我们是否可以令每个位置为最大值(即把包含该点的线段全部选上),然后求出其对应的最小值?,最终的答案为所有差值中的最大值。
因为要进行多次区间修改和查询,所以使用线段树进行维护,又因为实际上只有 1e5 个点,所以我们可以通过对每个点去遍历得到答案,具体使用优先队列去进行维护,我们使用两个优先队列,第一个优先队列维护增加的线段,第二个优先队列维护应该减去的线段,所以第二个优先队列按照右端点进行排序,当我们把这条线段加入答案后,将其放入第二个优先队列中,若第二个优先队列中存在不合法的线段,即右端点小于当前点 i i i,则将该线段删去即可。
#include <bits/stdc++.h>using namespace std;
const int N = 2e6 + 5;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef array<ll, 3> p3;
int mod = 998244353;
const int maxv = 4e6 + 5;
// #define endl "\n"struct node
{ll l, r, add, maxv, minv;#define l(x) tr[x].l#define r(x) tr[x].r#define sum(x) tr[x].sum#define add(x) tr[x].add#define maxv(x) tr[x].maxv#define minv(x) tr[x].minv
} tr[N];void update(int p)
{maxv(p) = max(maxv(p * 2), maxv(p * 2 + 1));minv(p) = min(minv(p * 2), minv(p * 2 + 1));
}void build(int p, int l, int r)
{if (l == r){tr[p] = {l, r, 0, 0, 0};return;}l(p) = l, r(p) = r, maxv(p) = 0, minv(p) = 0, add(p) = 0;int mid = (l + r) / 2;build(p * 2, l, mid);build(p * 2 + 1, mid + 1, r);update(p);
}void up(int p, int tag)
{add(p) += tag;maxv(p) += tag;minv(p) += tag;
}void pushdown(int p)
{if (add(p)){up(p * 2, add(p)), up(p * 2 + 1, add(p));add(p) = 0;}
}void modify(int p, int l, int r, int tag)
{if (l <= l(p) && r(p) <= r){up(p, tag);return;}pushdown(p);int mid = (l(p) + r(p)) / 2;if (l <= mid)modify(p * 2, l, r, tag);if (r > mid)modify(p * 2 + 1, l, r, tag);update(p);
}ll querymax(int p, int l, int r)
{if (l <= l(p) && r(p) <= r){// cout<<l<<" "<<r<<" "<<sum(p)<<endl;return maxv(p);}pushdown(p);int mid = (l(p) + r(p)) / 2;ll res = 0;if (l <= mid)res = querymax(p * 2, l, r);if (r > mid)res = max(res, querymax(p * 2 + 1, l, r));return res;
}ll querymin(int p, int l, int r)
{if (l <= l(p) && r(p) <= r){// cout<<l<<" "<<r<<" "<<sum(p)<<endl;return minv(p);}pushdown(p);int mid = (l(p) + r(p)) / 2;ll res = 2e9;if (l <= mid)res = querymin(p * 2, l, r);if (r > mid)res = min(res, querymin(p * 2 + 1, l, r));return res;
}int cal(int l, int r)
{return querymax(1, l, r) - querymin(1, l, r);
}
void solve()
{int n, m;cin >> n >> m;vector<pll> se(n);vector<int> p;for (int i = 0; i < n; i++){int x, y;cin >> x >> y;se[i] = {x, y};p.push_back(x), p.push_back(y);}p.push_back(1);p.push_back(m);sort(p.begin(), p.end());p.erase(unique(p.begin(), p.end()), p.end());for (int i = 0; i < n; i++){auto [l, r] = se[i];l = lower_bound(p.begin(), p.end(), l) - p.begin();r = lower_bound(p.begin(), p.end(), r) - p.begin();se[i] = {l + 1, r + 1};}sort(se.begin(), se.end(), [](pll x, pll y){ return x.second < y.second; });int st = lower_bound(p.begin(), p.end(), 1) - p.begin();st++;int ed = lower_bound(p.begin(), p.end(), m) - p.begin();ed++;build(1, st, ed);priority_queue<pll, vector<pll>, greater<pll>> x, y;for (auto [l, r] : se)x.push({l, r});int ans = 0;for (int i = 0; i < p.size(); i++){// auto [nx,ny]=x.top();int tar = i+1;while (x.size() && x.top().first <= tar && x.top().second >= tar){auto [nl, nr] = x.top();x.pop();y.push({nr, nl});modify(1, nl, nr, 1);}while (y.size() && y.top().first < tar){auto [nl, nr] = y.top();y.pop();modify(1, nr, nl, -1);}ans = max(ans, cal(st, ed));}cout << ans << endl;
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;t = 1;cin >> t;while (t--){solve();}system("pause");return 0;
}
相关文章:
Codeforces Round 904 (Div. 2) C
C. Medium Design 思路:我们设最大值所在的下标为 x x x,最小值所在的下标为 y y y,那么我们考虑一段区间对于答案的贡献: 若一段区间覆盖了 x x x,但没有覆盖 y y y,那么这段区间需要选择 若一段区间覆盖了 y y y,但没有覆盖 x…...
DBeaver连接数据库报错:Public Key Retrieval is not allowed 的解决方案
写在前面: DBeaver是一款免费的数据库管理工具,安装也是傻瓜式一键安装,比较推荐。 DBeaver官网(加载有点慢,耐心等待):DBeaver Community | Free Universal Database Tool 报错详情ÿ…...
DeepFace【部署 04】轻量级人脸识别和面部属性分析框架deepface使用Docker部署CPU+GPU两个版本及cuDNN安装
使用Docker部署CPUGPU 1.CPU2.GPU3.cuDNN安装3.1 Prerequisites3.2 下载Linux版本cuDNN3.3 安装 1.CPU 本说明基于DeepFace的Docker镜像文件deepface_image.tar进行说明。 # 1.导入镜像 docker load -i deepface_image.tar# 2.创建模型文件夹【并将下载好的模型文件上传】 mk…...
程序生活 - 减肥小记
文章目录 缘起健康就好了吗?关于外在和物质生活难与易 我的减肥生活一些细节轻断食戒糖、油炸、重口味睡眠改变社交方式用运动化解压力不喝牛奶 缘起 2017年的一次腿受伤,让我从一个怎么都吃不胖的人,变成了一个实实在在的胖子。 如果你从来…...
深度学习_4_实战_直线最优解
梯度 实战 代码: # %matplotlib inline import random import torch import matplotlib.pyplot as plt # from d21 import torch as d21def synthetic_data(w, b, num_examples):"""生成 Y XW b 噪声。"""X torch.normal(0,…...
《视觉SLAM十四讲》公式推导(三)
文章目录 CH3-8 证明旋转后的四元数虚部为零,实部为罗德里格斯公式结果 CH4 李群与李代数CH4-1 SO(3) 上的指数映射CH4-2 SE(3) 上的指数映射CH4-3 李代数求导对极几何:本质矩阵奇异值分解矩阵内积和迹 CH3-8 证明旋转后的四元数虚部为零,实部…...
pnpm、npm、yarn的区别
pnpm、npm、yarn是三种不同的包管理器,它们之间有一些区别。 安装速度:pnpm的安装速度比npm和yarn快,因为它使用了只下载必需的模块,而不是下载整个依赖树。此外,pnpm还可以并行下载模块,从而进一步提高下…...
搞定蓝牙——第四章(GATT协议)
搞定蓝牙——第四章(GATT协议) 原理介绍层次结构server和client端Attribute ESP32代码 文章下面用的英文表示: server和client:服务端和客户端 char.:characteristic缩写,特征 Attribute:属性 ATT:Attribut…...
Go语言入门心法(十四): Go操作Redis实战
Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 Go语言入门心法(六): HTTP面向客户端|服务端编程 Go语言入门心法(七): 并发与通道 Go语言入门心法(八): mysql驱动安装报错o…...
Java学习笔记(三)
前言 这个主要就是想记录一个点,就是二维数组保存的元素就是一维数组的地址,这个概念大家都知道了,那么接下来就是我最近写程序发生的一个事情了。 随机打乱一个一维数组 这个程序我相信大家都是会写的,通过randomArr来随机打乱…...
Flutter笔记:GetX模块中不使用 Get.put 怎么办
Flutter笔记 GetX模块中不使用 Get.put 怎么办 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/13400672…...
2023前端面试整理
1. 介绍一下最近参与的项目,负责那些业务,在开发过程中遇到过问题吗?最后是咋样处理的? 之前负责过大小十几个项目,负责过浙里办的整套上架流程,负责过数据大屏统计,后台管理系统文书生成表单生成等,浙政钉…...
文化融合:TikTok如何弥合跨文化差异
随着全球化的加速和数字媒体的崛起,社交媒体平台已经成为连接世界各地人们的纽带。其中,TikTok作为一个引领者,正在以惊人的速度消除跨文化差异,促进文化融合,使人们更加了解和尊重不同背景和传统。 本文将深入探讨Ti…...
asp.net core获取config和env
配置文件的读取和使用 //读取配置文件直接使用 var configModel configuration.GetSection("DataBaseConfig").Get<DataBaseConfigModel>(); //读取配置文件注入到IOC中 services.Configure<AssemblyConfig>(configuration.GetSection("AssemblyC…...
Git不常用命令(持续更新)
今日鸡汤:当你最满足的时候,通常也最孤独;当你最愤慨的时候,通常也最可怜。 此博文会列出一些平时不常用,但是能提高效率的git命令,后续会出IDEA对应的操作步骤 快看看你是不是都用过... 分支(…...
PostPreSql 数据库的一些用法
1、varchar 类型转换成数字 select sum(CAST(order_num AS NUMERIC)) from ads_port_cli_cons_freq_rpt where yr2023 and mon 08...
小工具推荐:FastGithub的下载及使用
前言:FastGithub是基于dotnet开发的一款开源Github加速器,通过自动获取与GitHub相关的IP地址并更新本地hosts文件来提高资源访问速度,使GitHub的访问畅通无阻。原理(复制过来的): ①修改本机的DNS服务指向…...
硬件信息查看工具 EtreCheckpro mac中文版功能介绍
etrecheckpro mac中文版是一款专业的硬件信息查看工具,它能够快速的检测Mac电脑的软硬件信息,加强用户对自己计算机的了解,EtreCheckPro for Mac下载首先会对电脑的软硬件信息进行扫描收集,之后才会显示出来。EtreCheck Mac版报告…...
宝塔Python3.7安装模块报错ModuleNotFoundError: No module named ‘Crypto‘解决办法
前言 今晚遇到一个问题,宝塔服务器上安装脚本的模块时,出现以下报错,这里找到了解决办法 Traceback (most recent call last):File "/www/wwwroot/unifysign/fuck_chaoxing/fuck_xxt.py", line 4, in <module>from Crypto.…...
优化改进YOLOv5算法:加入ODConv+ConvNeXt提升小目标检测能力——(超详细)
为了提升无人机视角下目标检测效果,基于YOLOv5算法,在YOLOv5主干中实现了Omnidimensional Convolution(ODConv),以在不增加网络宽度和深度的情况下提高精度,还在YOLOv5骨干网中用ConvNeXt块替换了原始的C3块,以加快检测速度。 1 Omni-dimensional dynamic convolution …...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...
