Codeforces 1462F The Treasure of The Segments
题意
给\(n(1\leq n\leq 2*10^5)\)个线段$[l_i,r_i] (1≤l_i≤r_i≤10^9) $,问最少删除几个线段,使得剩下线段中,有至少一个线段与所有线段相交。
分析
对于线段相交且在线段端点数据范围很大的情况下,第一想法是离散化。
如果枚举一个线段和其他所有线段判交,时间复杂度是\(O(n^2)\),显然是无法接受的,考虑如何优化。
对于一个左端点为\(l_i\),右端点为\(r_i\)的线段,我们可以考虑,若有另一个具有相同左端点,右端点为\(r\),且\(r>r_i\)的线段,取另一个线段作为交线段更优。
那么我们可以考虑枚举左端点,以上述最大的\(r\)为右端点判交,但若是还与其他所有线段判交,时间复杂度仍然是\(O(n^2)\)。
再次考虑优化,由于我们做法是枚举左端点\(i\),那么随着左端点增大,相交的线段也会变化,我们考虑这个变化量,将线段排序,这样可以保证在右端点增大时,新增线段在数组中是连续的,这样即可考虑双指针。
在之前的所取集合中,大部分线段是仍然可以与当前线段相交的,而无法相交的是右端点为\(i-1\)的线段,所以当一条线段加入集合中,在其\(r_i\)上做一个标记,遍历到时减去数字即可。
#pragma GCC optimize(3, "Ofast", "inline")
#include <bits/stdc++.h>
#define start ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll long long
#define ull unsigned long long
#define int ll
#define ls st<<1
#define rs st<<1|1
#define pii pair<int,int>
#define rep(z, x, y) for(int z=x;z<=y;++z)
#define repd(z, x, y) for(int z=x;z>=y;--z)
#define com bool operator<(const node &b)const
using namespace std;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
const int maxn = (ll) 1e6 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
int T = 1;
int sum[maxn];
pii a[maxn];
int r[maxn];
void solve() {
int n;
cin >> n;
vector<int> v;
rep(i, 1, n) {
cin >> a[i].first >> a[i].second;
v.push_back(a[i].first);
v.push_back(a[i].second);
}
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
rep(i, 0, v.size())r[i] = sum[i] = 0;
rep(i, 1, n) {
a[i].first = lower_bound(v.begin(), v.end(), a[i].first) - v.begin() + 1;
a[i].second = lower_bound(v.begin(), v.end(), a[i].second) - v.begin() + 1;
r[a[i].first] = max(r[a[i].first], a[i].second);
}
sort(a + 1, a + n + 1);
int now = 0;
int ans = 1;
int pos = 1;
rep(i, 0, v.size()) {
now -= sum[i - 1];
while (pos <= n) {
if (a[pos].first <= r[i]) {
++sum[a[pos].second];
++pos;
++now;
} else
break;
}
ans = max(ans, now);
}
cout << n - ans << '\n';
}
signed main() {
start;
cin >> T;
while (T--)
solve();
return 0;
}
Codeforces 1462F The Treasure of The Segments的更多相关文章
- Educational Codeforces Round 6 F. Xors on Segments 暴力
F. Xors on Segments 题目连接: http://www.codeforces.com/contest/620/problem/F Description You are given ...
- CodeForces:#448 div2 B. XK Segments
传送门:http://codeforces.com/contest/895/problem/B B. XK Segments time limit per test1 second memory li ...
- Educational Codeforces Round 112 E、Boring Segments
原题网址 https://codeforces.com/contest/1555/problem/E 题目大意 有n个区间.每个区间是[1,m]的子区间.从a可以一步走到b的充要条件是存在区间同时覆盖 ...
- CodeForces 289A Polo the Penguin and Segments (水题)
题意:给你 n 段区间,而且还是不相交的,然后你只能向左扩展左端点,或者向右扩展右端点,然后扩展最少的步数让整数总数能够整除 k. 析:很简单么,只要在记录算一下数量,然后再算出 k 的倍数差多少就行 ...
- 【Codeforces 494A】Treasure
[链接] 我是链接,点我呀:) [题意] 让你把"#"用至少一个右括号代替 使得整个括号序列合法 [题解] 首先我们不要考虑井号 考虑最简单的括号序列 并且把左括号看成1,右括号看 ...
- 【Codeforces 979B】Treasure Hunt
[链接] 我是链接,点我呀:) [题意] 每次你可以将一个字符变成一个不同于本身的字符. 每个人需要改变n次(且不能不改变) 设每个人的字符串中出现次数最多的字符出现的次数为cnt[0~2] 问你谁的 ...
- CodeForces - 1214D D. Treasure Island
题目链接:https://vjudge.net/problem/2728294/origin 思路:可以抽象成管道,先试试能不能找到一个通道能通到终点, 如果可以则封锁这个通道,一个石头即可, 再试试 ...
- CF1462-F. The Treasure of The Segments
题意: 给出n个线段组成的集合,第i个线段用 \(\{l_i, r_i\}\) 表示线段从坐标轴的点\(l_i\)横跨到点\(r_i\).现在你可以删除其中的一些线段,使得剩下的线段组成的集合中至少存 ...
- D - Nested Segments CodeForces - 652D (离散化+树桩数组)
D - Nested Segments CodeForces - 652D You are given n segments on a line. There are no ends of some ...
- Codeforces Round #690 (Div. 3)
第一次 ak cf 的正式比赛,不正式的是寒假里 div4 的 Testing Round,好啦好啦不要问我为什么没有 ak div4 了,差一题差一题 =.= 不知不觉已经咕了一个月了2333. 比 ...
随机推荐
- 图数据库 NebulaGraph 的内存管理实践之 Memory Tracker
数据库的内存管理是数据库内核设计中的重要模块,内存的可度量.可管控是数据库稳定性的重要保障.同样的,内存管理对图数据库 NebulaGraph 也至关重要. 图数据库的多度关联查询特性,往往使图数据库 ...
- phalApi非常好用的php-api框架
偶然的一天,在开源中国,找到了phalApi,看到了介绍,我一下子被吸引了,这正是我一直要找的后端生成json的API框架,有了这个造数据的系统,我前端做得更得心应手了,渐渐我有了全栈开发的想法!
- python学习之-------OS 文件夹和文件操作
# OS模块 :查看一个文件夹下所有文件,这个文件夹有文件夹,不能用walk# -- coding: UTF-8 --import osimport sys#C:\Users\Administrato ...
- Java(数组使用、Arrays、稀疏数组)
1.数组的使用 For-Each循环 int[] arrays = {1,2,3,4,5}; //打印全部的数组元素 JDK1.5 没有下标 for (int array : arrays) { Sy ...
- 天下苦 Spring 久矣,Solon v2.3.3 发布
Solon 是什么框架? 一个,Java 新的生态型应用开发框架.它从零开始构建,有自己的标准规范与开放生态(全球第二级别的生态).与其他框架相比,它解决了两个重要的痛点:启动慢,费资源. 解决痛点? ...
- Linux系统运维之负载均衡Tengine
一.介绍 Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到 ...
- synchronized中wait、notify的原理与源码
synchronized中wait.notify的原理与源码 1.wait和notify的流程图 2.JVM源码 java层面wait的方法 public final native void wait ...
- 暗黑2能用Java开发?还能生成APP?
最近烧哥发现个宝藏项目,竟然用Java开发了暗黑2出来. 众所周知,暗黑2是暴雪开发的一款经典游戏,距今虽有20多年,仍然有很多粉丝. 粉丝延续热情的方式有很多,一种是做Mod,比如魔电,对怪物.技能 ...
- AcWing 第87场周赛题解
T1 移动棋子 算出数值为 \(1\) 的点离 \((3, 3)\) 的距离即可. #include <iostream> #include <cstring> #includ ...
- HTB靶场之Sandworm
准备: 攻击机:虚拟机kali. 靶机:Sandworm,htb网站:https://www.hackthebox.com/,靶机地址:https://app.hackthebox.com/machi ...