N - 不重叠的线段

X轴上有N条线段,每条线段有1个起点S和终点E。最多能够选出多少条互不重叠的线段。(注:起点或终点重叠,不算重叠)。
例如:[1 5][2 3][3 6],可以选[2 3][3 6],这22条线段互不重叠。

投入

第1行:1个数N,线段的数量(1<=2≤N≤10000 )
第 2∼N+1行:每行2个数,线段的起点和终点(−109≤S,E≤109 )

输出

输出最多可以选择的线段数量。

样本1

投入copy 输出复制
3
1 5
2 3
3 6
2
#include
#include
#include
#include
#include
using namespace std;
#define scanf scanf_s;

const int N = 1e4 + 10;
typedef long long ll;

struct node {
	int l, r;

	bool operator <(struct node &a)
	{
		return r < a.r;
	}

}all[N];

int main()
{
	int n; cin >> n;
	for (int i = 1; i <= n; i++) cin >> all[i].l >> all[i].r;

	priority_queue, greater> heap;

	sort(all + 1, all + n + 1);

	int sum = 1; heap.push(all[1].r);

	for (int i = 2; i <=n; i++)
	{
		if (heap.top() <= all[i].l)
		{
			sum++;
			heap.pop();
			heap.push(all[i].r);
		}
	}

	cout << sum << endl;
}

 

你可能感兴趣的:(算法)