2 F. Greetings(离散化+树状数组)

题目链接

F. Greetings

题意

image

题解

由于两个人的速度是一样的,所以到达终点之前两个人是不会相遇的,考虑一下什么情况两个人会相遇,其中一个人到达终点时,另一个人,终点所在地的前面,并且它的终点在更右边。
将两个人的起点终点分别用 S a 、 S b 、 E a 、 E b S_a 、S_b、 E_a、 E_b SaSbEaEb表示,并假设 a a a在前 b b b在后(b在前是对称的),有下图

  1. a a a的终点 < < < b b b的终点,这时两者同时出发,a到终点时,b已经经过的a的终点,两者不会相遇,对答案没有贡献
    19bf509ef2070db7825b2eaddda78458.jpeg
  2. a a a的终点 > > > b b b的终点,这时b会先到终点,速度一样,a此时还没有到达 E b E_b Eb,此时两者一定会在 E b E_b Eb相遇
    0972e8479cc965d5b05e6802a33eebed.jpeg
    所以答案转化为对于当前区间计算有多少个区间被它所包含。

因为这道题目数据的实际大小是没有意义的,相对大小是有用的,并且值域比较大,我们考虑离散化,然后通过树状数组去查询。
具体的做法是,先按右端点从小打大排序,然后从前往后遍历区间,每次查询起点大于当前点起点的个数。就是这个区间对答案产生的贡献。

代码

#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_backusing namespace std;void solve() {int n;cin>>n;struct node{int l,r;bool operator<(const node &t)const{return r<t.r;}};vector<node>a(n);vector<int>b(2*n);int k=0;rep(i,0,n-1){cin>>a[i].l>>a[i].r;b[k++]=a[i].l;b[k++]=a[i].r;}sort(b.begin(),b.end());rep(i,0,n-1){a[i].l=lower_bound(b.begin(),b.end(),a[i].l)-b.begin()+1;a[i].r=lower_bound(b.begin(),b.end(),a[i].r)-b.begin()+1;}sort(a.begin(),a.end());
//	rep(i,0,n-1){
//		cout<<a[i].l<<' '<<a[i].r<<endl;
//	}vector<int>c(2*n+1,0);auto lowbit=[](int x){return x&-x;};auto add=[&](int x,int k)->void{for(int i=x;i<=2*n;i+=lowbit(i)){c[i]+=k;}	};auto sum=[&](int x){int res=0;for(int i=x;i;i-=lowbit(i)){res+=c[i];}	return res;};int ans=0;rep(i,0,n-1){int r=a[i].r,l=a[i].l;ans+=sum(r)-sum(l-1);add(l,1);}cout<<ans<<endl;
}signed main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//	freopen("1.in", "r", stdin);int _;cin>>_;while(_--)solve();return 0;
}

总结

  1. 离散化的板子记得不是很熟,这种东西应该很熟并且默写的很快的
  2. 树状数组用的还是比较少有些细节记得不太清,就比如树状数组的下标是从几开始的?
    答案是1,这就导致离散化的时候也要从1开始。
  3. 看了一些题解,发现了这类问题被称为二维偏序问题
    a i < a j 、 b i > b j a_i<a_j、b_i>b_j ai<ajbi>bj

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

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

相关文章

模式匹配这么好,Java语法里有吗?

这篇文章我们借助新版Java来理解模式匹配&#xff0c;Rust版的模式匹配稍后就端上来&#xff0c;各位先尝尝Java这杯老咖啡还香不香&#x1f604;。 什么是模式匹配&#xff1f; 下图直观的表达了模式匹配的概念。 所谓模式类似上图中木盒的各种形状的洞洞&#xff0c;我们…

Unable to make field private JavacProcessingEnvironment$DiscoveredPro报错解决办法

maven项目打包报错 报错信息 Unable to make field private com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs accessible: module jdk.compiler does not &q…

proxysql

这里是引用 mysql 安装 mysql-3307 mysql -P 3307 -u root -proot -h 10.211.55.8create database db1; CREATE TABLE db1.tab_20240102 (id INT PRIMARY KEY,name VARCHAR(50),email VARCHAR(50),age INT ); CREATE TABLE db1.tab_20240103 (id INT PRIMARY KEY,name V…

2.20总结

根据这周的学习任务在学习KMP算法和哈希算法,这两种算法主要都用于字符串&#xff0c;而且学习起来都有一定的难度&#xff0c;刚开始的时候一个视频要看好几遍才能弄懂&#xff0c;但是经过这两天的学习也有了一定的收KMP 我通过一小段简单的代码来强化我对于KMP算法的理解&a…

postgis sde表在geoserver中服务发布

文章目录 简要说明maven依赖样例代码 简要说明 利用开源工具geoserver-manager&#xff0c;对postgresql的空间表进行地图服务发布 maven依赖 <dependency><groupId>com.github.dov-vlaanderen</groupId><artifactId>geoserver-manager</artifact…

【MySQL】 多表查询与笛卡尔积深入学习

推荐一款AI网站 AI写作与AI绘画智能创作平台 - 海鲸AI | 智能AI助手&#xff0c;可以免费领取GPT3.5无限卡 在数据库操作中&#xff0c;多表查询是一项基础而重要的技能。它允许我们从多个表中检索数据&#xff0c;以便进行复杂的数据分析和报告。本文将深入探讨MySQL中的多表查…

model.train()和model.eval()两种模式的原理

1. model.train() 在使用 pytorch 构建神经网络的时候&#xff0c;训练过程中会在程序上方添加一句model.train()&#xff0c;作用是 启用 batch normalization 和 dropout 。 如果模型中有BN层&#xff08;Batch Normalization&#xff09;和 Dropout &#xff0c;需要在 训练…

3. B. Milena and Admirer(贪心、小结论、思维)

题目链接 B. Milena and Admirer 题意 给一个长度为 n n n的序列&#xff0c;我们通过操作使这个序列变成非递减序列 操作&#xff1a;对 a [ i ] a[i] a[i]&#xff0c;我们将 a [ i ] a[i] a[i]删除&#xff0c;将 a [ i ] − x 、 x a[i]-x、x a[i]−x、x插入原位置&…

Oracle19c | 操作归纳

本篇目录 1. PDB 可插拔数据库1.1 创建 PDB 1. PDB 可插拔数据库 1.1 创建 PDB # oralce 19c 创建 pdb CREATE PLUGGABLE DATABASE pdb_name ADMIN USER username IDENTIFIED BY password; # oralce 19c 启用数据库 ALTER PLUGGABLE DATABASE pdb_name OPEN; # 切换 pdb alte…

【感知算法】Dempster-Shafer理论(下)

尝试DS理论应用到自动驾驶地图众包更新。 地图特征变化判断 a mass function is applied to quantify the evidence of the existence. existence state: existenct、non-existent、tenative、conflict ∃ ∄ Ω ϕ \exist \\ \not\exist \\ \Omega \\ \phi ∃∃Ωϕ ma…

对 babel 的了解,几个 stage 代表的意思

What is Babel? Babel Babel 是一个广泛使用的 JavaScript 编译器&#xff0c;它主要用于将 ECMAScript 2015&#xff08;ES6&#xff09;代码转换为向后兼容的 JavaScript 版本&#xff0c;以便在不同浏览器和环境中运行。Babel 具有强大的插件系统&#xff0c;可以通过插件…

阿里云服务器多少钱?2024年阿里云服务器价格配置表出炉!

2024年阿里云服务器租用价格表更新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服…

docker的底层原理六: 联合文件系统(UnionFS)

Docker的底层存储原理基于联合文件系统&#xff08;UnionFS&#xff09;。 联合文件系统&#xff08;UnionFS&#xff09;是一种特殊的文件系统&#xff0c;它允许独立地叠加多个目录层&#xff0c;呈现给用户的是这些目录层的联合视图。这种结构使得在Docker中&#xff0c;不…

【xlwings】结合pandas做类似vlookup的功能

参考自CSDN 导入模块 import pandas as pd import xlwings as xw创建sheet #创建excel文档wb xw.Book() # 创建一个Excel进程App, 并在App中新建一个Book,Book下自动创建一个Sheetwb.save(文件)##excel表显示设定appxw.App(visibleFalse,add_bookFalse)app.display_alertsF…

jmeter 命令行启动 动态参数化

[Jmeter命令行参数] 一、在linux中&#xff0c;使用非gui的方式执行jmeter。若需更改参数&#xff0c;必须先编辑jmx文件&#xff0c;找到对应的变量进行修改&#xff0c;比较麻烦。因此&#xff0c;可以参数化一些常用的变量&#xff0c;直接在Jmeter命令行进行设置 二、参数…

尚硅谷ES基础 - RESTful JSON基本概念倒排索引HTTP

RESTful & JSON REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。 Web 应用程序最重要的 REST 原则是&#xff0c;客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。…

自动驾驶中之定位总结

1 前言2 典型的单个定位方式2.1 基于通信的定位方法2.1.1 GNSS 全球卫星导航系统2.1.1.1 gnss的优点与缺点2.1.1.2 gnss定位技术2.1.1.2.1 RTK定位技术2.1.1.2.2 PPP定位技术 2.1.1.2 gnss定位技术总结 2.1.2 车联网定位 2.1 基于航位推算的定位方法2.1.1 惯性测试单元定位IMU2…

Microsoft Office Visio 2007中绘制大括号

文章目录 一、Microsoft Office Visio 2007中绘制大括号 一、Microsoft Office Visio 2007中绘制大括号 在Microsoft Office Visio 2007中绘制大括号的方法如下&#xff1a; 打开Visio 2007——文件——形状——其他Visio方案——标注 此时左侧栏中出现“标注”栏&#xff0c…

代码随想录刷题笔记-Day21

1. 二叉搜索树中的插入操作 701. 二叉搜索树中的插入操作https://leetcode.cn/problems/insert-into-a-binary-search-tree/给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。…

Hive 窗口函数札记

窗口函数的理解是hive函数里的一个高阶内容&#xff0c;把一些容易混淆的做个记录&#xff0c;以方便随时查看。 1&#xff1a;ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING 含义&#xff1a; 这个定义表示窗口范围从当前行的前任意多行开始&#xff08;包括最早的行&a…