贪心:火烧赤壁

题目:P1496 火烧赤壁 - 洛谷

注意点1:

记得先a[1]的值初始化,再循环。

易错点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;
} 

记得多画图

相关推荐
迷途之人不知返18 小时前
List的模拟实现
数据结构·c++·学习·list
无敌秋19 小时前
C++ 抽象工厂模式实战指南
开发语言·c++·抽象工厂模式
Chat_zhanggong34519 小时前
主推NT98336BG作用有哪些?
嵌入式硬件·算法
CoderMeijun19 小时前
C++ 智能指针:auto_ptr
c++·内存管理·智能指针·raii·auto_ptr
wuminyu19 小时前
专家视角看Lambda表达式的原理解析
java·linux·c语言·jvm·c++
Run_Teenage19 小时前
算法:线段树
算法
Westward-sun.19 小时前
YOLOv2算法全方位解析:从BatchNorm到聚类先验框的九大改进
算法·yolo·聚类
扶苏xw19 小时前
【离散化算法】
算法
码之气三段.19 小时前
Codeforces Round 1095 (Div. 2) 补题
算法
ximu_polaris19 小时前
设计模式(C++)-行为型模式-命令模式
c++·设计模式·命令模式