栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【NKOJ-5222】种树

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【NKOJ-5222】种树

问题描述

某条街被划为  条路段,这  条路段依次编号为 。每个路段最多可以种一棵树。现在居民们给出了  组建议,每组建议包含三个整数 ,表示居民希望在路段  到  之间至少要种  棵树。这些建议所给路段的区间可以交叉。请问:如果要满足所有居民的建议,至少要种多少棵树。

输入格式

第一行为 ,表示路段数。

第二行为 ,表示建议数。

下面  行描述一条建议:,用一个空格分隔。

输出格式

输出只有一个数,为满足所有居民的建议,所需要种树的最少数量。

样例输入

9
4
1 4 2
4 6 2
8 9 2
3 5 2

样例输出

5

#include 
using namespace std;
int n, h, ans;
bool bb[30005];
struct aa {int b, e, t;} a[30005];
bool cmp(aa a, aa b) {return a.e < b.e;}
int main(){
	cin >> n >> h;
	for (int i = 1; i <= h; i++) cin >> a[i].b >> a[i].e >> a[i].t;
	sort(a + 1, a + 1 + h, cmp);
	for (int i = 1; i <= h; i++) {
		int tot = 0;
		for (int j = a[i].b; j <= a[i].e; j++) tot += bb[j];
		for (int j = a[i].e; j >= a[i].b; j--) {
			if (tot >= a[i].t) break;
			if (!bb[j]) bb[j] = 1, ans++, tot++;
		}
	}
	cout << ans << endl;
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/656535.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号