LibreOJ #10087. 「一本通 3.4 例 1」Intervals

为什么差分约束的题我总能不用差分约束做。


这道题我用的贪心。其实就是区间选点问题啦,对于这类问题,我们的贪心策略肯定是让多个区间覆盖在一个点上,那么我们可以想到的就是按照末尾排序,在一个区间的末尾去加点,这样才能使一个点覆盖更多的点,然后就随便统计统计,如果想要优化,可以加树状数组来搞,但是由于太懒了,没加~

代码:

#include <bits/stdc++.h>
using namespace std;
struct node{
	int l , r , w;
};
node e[50010];
int n , ans;
int vis[50010];
bool cmp(node x , node y){
	return x.r < y.r;
}
int main(){
	int T;
	cin >> T;
	while(T--){
		cin >> n;
		memset(vis , 0 , sizeof(vis));
		ans = 0;
		for(int i = 1; i <= n; i++) cin >> e[i].l >> e[i].r >> e[i].w;
		sort(e + 1 , e + n + 1, cmp);
		for(int i = 1; i <= n; i++){
			int sum = 0;
			for(int j = e[i].l; j <= e[i].r; j++) 
				if(vis[j]) sum++;
			if(sum >= e[i].w) continue;
			for(int j = e[i].r; j >= e[i].l; j--){
				if(!vis[j]) vis[j] = 1 , sum++ , ans++;
				if(sum >= e[i].w) break;
			}
		}
		cout << ans << endl;
	}
	return 0;
}
原文地址:https://www.cnblogs.com/bzzs/p/13231033.html