贪心:火烧赤壁

题目:P1496 火烧赤壁 - 洛谷

注意点1:

记得先a1的值初始化,再循环。

易错点2:

如果区间重复,记得更新右端点的值。可能原来的区间的右端点更大,也有可能合并的区间的右端点更大。我们使用一个max,保留最大的那一个。

易错点3:

最后一次循环会直接断掉,我们不要忘记++手动加上++最后一段合并区间的长度!

代码:

cpp 复制代码
#include <iostream>
#include <algorithm>

using namespace std;
typedef long long LL;
const int N = 2e4 + 10;

LL n;

struct node
{
	LL l;
	LL r;
}a[N];

bool cmp(node& x, node& y)
{
	return x.l < y.l;
}

LL ret = 0;

int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> a[i].l >> a[i].r;
	
	sort(a+1, a+1+n, cmp);
	
	LL begin = a[1].l;
	LL right = a[1].r;
	
	for (int i = 2; i <= n; i++)
	{
		if (right >= a[i].l) 
		{
			right = max(right, a[i].r);
			continue;
		}	 
		else
		{
			ret += a[i-1].r-begin;
			begin = a[i].l;
			right = a[i].r;
		}
	}
	
	 ret += right - begin; // 加上最后一个合并区间的长度
	
	cout << ret << endl;
	
	return 0;
} 

记得多画图

相关推荐
古城小栈11 小时前
为啥说:训练用BF16,推理用FP16
人工智能·算法·机器学习
KaMeidebaby11 小时前
卡梅德生物技术快报|蛋白 N 端测序在重组贻贝融合蛋白表征中的应用,解决原核表达序列偏移工艺难题
前端·人工智能·物联网·算法·百度
浆果020711 小时前
NanoTrack C++ — RK3588 实时目标跟踪
c++·目标跟踪·rk3588
Turbo正则12 小时前
群论在AI中的应用概述
人工智能·算法·抽象代数
ysa05103012 小时前
【并查集】判环
c++·笔记·算法
持力行12 小时前
C/C++ 中的 char*:它标识数组吗?为什么能用下标访问?
c语言·c++
Jerry12 小时前
KeetCode 44. 开发商购买土地
算法
Jerry12 小时前
KeetCode 58. 区间和
算法
Jerry13 小时前
LeetCode 209. 长度最小的子数组
算法
汉克老师13 小时前
GESP2026年6月认证C++六级( 第三部分编程题(2、满二叉树))精讲
c++·深度优先·树形dp·满二叉树·gesp六级·树形dfs