贪心:火烧赤壁

题目: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 小时前
C++进阶 C++11(下)
开发语言·c++
有点。11 小时前
C++(贪心算法一)
c++·贪心算法
Matrix_1111 小时前
手机里的计算摄影:广角形变校正算法
人工智能·算法·智能手机·计算摄影
WBluuue11 小时前
数据结构与算法:有序表(二):跳表
数据结构·c++·算法·skiplist
赴生-12 小时前
C++进阶 异常
开发语言·c++
不好听61312 小时前
深入理解链表:线性数据结构的另一面
javascript·数据结构
x1387028595712 小时前
c语言中srtlen(指针使用计算字符长度)、传值和传址调用
c语言·开发语言·算法·visual studio
海兰13 小时前
【实用程序】电商销售分析仪表盘 — 从零搭建一个AI参与的全栈数据洞察系统
人工智能·学习·算法
凡人叶枫13 小时前
Effective C++ 条款28:避免使用 handles 指向对象内部
linux·服务器·开发语言·c++·嵌入式开发
zwenqiyu13 小时前
P5283 [十二省联考 2019] 异或粽子题解
c++·学习·算法