区间选点问题

Posted MT默哥的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区间选点问题相关的知识,希望对你有一定的参考价值。

题目描述

数轴上有\\(n\\)开区间\\((a_i,b_i)\\),请选择尽量多的区间,使其两两不相交。(开区间意味着,左右两个端点是不包含的)

输入格式

第一行\\(n(n \\le 1000000)\\) ,之后\\(n\\)行,每行两个数分别为\\(ai,bi\\)

输出格式

最少需要的点的个数

样例

样例输入1

3
1 3
2 4
3 5

样例输出1

1

数据范围

对于\\(20\\%\\)的数据,\\(n≤10\\)

对于\\(50\\%\\)的数据,\\(n≤1000\\)

对于\\(70\\%\\)的数据,\\(n≤100000\\)

对于\\(100\\%\\)的数据,\\(n≤1000000,0≤ai<bi≤1000000\\)

代码

#include<bits/stdc++.h>
using namespace std;
struct node
	int l,r;
;
node a[1000005];
bool cmp(node x,node y)

	return x.r<=y.r;

int main()

	int n;
	cin >> n;
	for(int i=1;i<=n;i++)
	
		cin >> a[i].l >> a[i].r;
	
	sort(a+1,a+n+1,cmp);
	int ans=0;
	int last=-1;
	for(int i=1;i<=n;i++)
	
		if(a[i].l>last)
		
			ans++;
			last=a[i].r;
		
	
	cout << ans;
	return 0;

以上是关于区间选点问题的主要内容,如果未能解决你的问题,请参考以下文章

选择不相交区间(区间选点问题)

区间选点问题-贪心策略

poj 1328 Radar Installation 贪心区间选点问题

UVa1615 Highway (贪心,区间选点)

区间选点

线段覆盖区间选点区间覆盖贪心讲解