已知N个事件的发生时刻和结束时刻(见下表,表中事件已按结束时刻升序排序)。一些在时间上没有重叠的事件,可以构成一个事件序列,如事件{2,8,10}。事件序列包含的事件数目,称为该事件序列的长度。请编程找出一个最长的事件序列。
输入:第一行为事件的个数N,以下共输入N行,每一行都有两个整数构成,第一个整数为事件开始时间,第二个整数为事件结束时间,时间的编号为其所在的行数(从0开始计数)。
输出:输出一个最长的时间序列
输入示例:
12
1 3
3 4
0 7
3 8
2 9
5 10
6 12
4 14
10 15
8 18
15 19
15 20
输出示例:
0 1 5 8 10
#include <iostream>
#include <string.h>
using namespace std;
int used[100]; //是否选取该区间
int begin[100];
int end[100];
int main(){
int N;
int i,j;
cin>>N;
memset(used,0,sizeof(used));
for(i=0;i<N*2;i++){
if(i%2==0)
cin>>begin[i/2];
else
cin>>end[i/2];
}
used[0]=1;
j=0;
for(i=1;i<N;i++){
if(end[j]<=begin[i]){
used[i]=1;
j=i;
}
}
for(i=0;i<N;i++){
if(used[i])
cout<<i<<" ";
}
return 0;
}