Description
A restaurant received n orders for the rental. Each rental order reserve the restaurant for a continuous period of time, the i-th order is characterized by two time values — the start time li and the finish time ri (li ≤ ri).
Restaurant management can accept and reject orders. What is the maximal number of orders the restaurant can accept?
No two accepted orders can intersect, i.e. they can't share even a moment of time. If one order ends in the moment other starts, they can't be accepted both.
Input
The first line contains integer number n (1 ≤ n ≤ 5·105) — number of orders. The following n lines contain integer values li and rieach (1 ≤ li ≤ ri ≤ 109).
Output
Print the maximal number of orders that can be accepted.
Sample Input
2 7 11 4 7
1
5 1 2 2 3 3 4 4 5 5 6
3
6 4 8 1 5 4 7 2 5 1 3 6 8
2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32#include<stdio.h> #include<algorithm> using namespace std; struct stu { int a,b; }p[510000]; bool cmp(stu n,stu m) { return n.b<m.b; } int main() { int n; while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) scanf("%d%d",&p[i].a,&p[i].b); sort(p,p+n,cmp); int s=1,j=0; for(int i=1;i<n;i++) { if(p[i].a>p[j].b) { j=i; s++; } } printf("%d\n",s); } return 0; }

本文介绍了一个算法问题,关于如何最大化接受餐厅的预订数量,在确保不同时段的预订不会发生时间上的冲突。通过一种有效的贪心算法策略,文章提供了解决方案,并附带了完整的C++代码实现。
373

被折叠的 条评论
为什么被折叠?



