ABC 355

D. Intersecting Intervals

首先思考两个区间相交会有哪些情况:有两种左右端点包含,一种大区间包含小区间。

但是反过来思考,两个区间不相交只会有两种情况:Ri < Lj 和 Rj < Li。非常典型的逆向思考

对左右端点升序排序后,枚举右端点,找到大于它的第一个左端点,后面所有的都符合。

n 个区间选两个共 n * ( n - 1 ) / 2,减掉两两不相交的数量,就是答案。注意总数不是 n。

复制代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 5e5 + 5, INF = 1e18;

int T, n, cnt, tot, ans, l[N], r[N];

signed main()
{
	cin >> n;
	for (int i = 1; i <= n; i ++)
		cin >> l[i] >> r[i];
	sort(l + 1, l + n + 1);
	sort(r + 1, r + n + 1);
	for (int i = 1; i <= n; i ++)
	{
		int pos = upper_bound(l + 1, l + n + 1, r[i]) - l;
		tot += n - pos + 1;
	}
	ans = n * (n - 1) / 2 - tot;
	cout << ans;
	return 0;
}
相关推荐
牵手夏日3 小时前
题目类型——左右逢源
算法
愚润求学3 小时前
【递归、搜索与回溯】FloodFill算法(一)
c++·算法·leetcode
sunny-ll5 小时前
【C++】详解vector二维数组的全部操作(超细图例解析!!!)
c语言·开发语言·c++·算法·面试
嵌入式@秋刀鱼6 小时前
《第四章-筋骨淬炼》 C++修炼生涯笔记(基础篇)数组与函数
开发语言·数据结构·c++·笔记·算法·链表·visual studio code
嵌入式@秋刀鱼6 小时前
《第五章-心法进阶》 C++修炼生涯笔记(基础篇)指针与结构体⭐⭐⭐⭐⭐
c语言·开发语言·数据结构·c++·笔记·算法·visual studio code
简简单单做算法6 小时前
基于PSO粒子群优化的VMD-LSTM时间序列预测算法matlab仿真
算法·matlab·lstm·时间序列预测·pso·vmd-lstm·pso-vmd-lstm
无聊的小坏坏6 小时前
高精度算法详解:从原理到加减乘除的完整实现
算法
愚润求学6 小时前
【递归、搜索与回溯】FloodFill算法(二)
c++·算法·leetcode
泽02026 小时前
C++之list的自我实现
开发语言·数据结构·c++·算法·list
南枝异客7 小时前
四数之和-力扣
java·算法·leetcode