贪心:火烧赤壁

题目: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;
} 

记得多画图

相关推荐
小小前端_我自坚强3 小时前
前端算法相关详解
前端·算法
Predestination王瀞潞3 小时前
类的多态(Num020)
开发语言·c++
Predestination王瀞潞3 小时前
类的继承(Num019)
开发语言·c++
Nuyoah11klay3 小时前
华清远见25072班C++学习假期10.3作业
c++
前端 贾公子4 小时前
《Vuejs设计与实现》第 5 章(非原始值响应式方案)下 Set 和 Map 的响应式代理
数据结构·算法
快乐是一切4 小时前
PDF底层格式之水印解析与去除机制分析
前端·数据结构
Hard but lovely4 小时前
C++---》stl : pair 从使用到模拟实现
c++·后端
MHJ_5 小时前
Multi-Metric Integration(多指标集成)
数据结构
林中青木5 小时前
读写INI文件源码(点击关注)
c++·ini文件读取