P2082 区间覆盖(加强版)
P2082 区间覆盖(加强版)
题目
已知有
输入
第一行一个正整数
接下来
输出
共一行,一个正整数,为覆盖后的区间总长。
样例
输入
3
1 100000
200001 1000000
100000000 100000001
输出
900002
提示
对于
对于
思路
在分析这道题之前先学习一下“区间合并”的问题:数轴上有
这是“区间覆盖问题”,分析:将区间左端点从小到大排序,如果第一个区间的左端点
按照上述方法,排序后从左到右依次枚举区间,复杂度为
回归本题,同样是一道“区间合并”的问题,看到区间问题容易想到贪心的方法,将区间左端点
代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
long long n, R, ans;
struct Range
{
long long l, r;
bool operator < (const Range v) const
{
return l < v.l;
}
} a[MAXN];
int main()
{
scanf("%d", &n);
for (long long i = 1; i <= n; i ++ )
scanf("%ld %ld", &a[i].l, &a[i].r);
sort(a + 1, a + n + 1);
for (long long i = 1; i <= n; i ++ )
{
if (R <= a[i].r)
{
ans += a[i].r - max(R, a[i].l) + 1;
R = a[i].r + 1;
}
}
printf("%ld", ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】