#include <iostream>
#include <algorithm>
using namespace std;
struct time // this struct is used to store the information of meeting
{
int id;
int startTime;
int endTime;
};
bool compare(struct time &a, struct time &b) //compare the object of struct time
{
return a.endTime <= b.endTime; //sort by ending time of greedy
}
void GreedySelect(int n, struct time a[])
{
bool result[n]; //store the result of schedule
for(int i=0; i<n; i++)
result[i] = false;
int i, j;
result[0] = true;
j=0;
i=1;
while(i<n)
{
if(a[i].startTime>a[j].endTime)
{
result[i] = true;
j=i;
}
else
result[i] = false;
i++;
}
for(int i=0; i<n; i++)
{
//cout << result[i] << " ";
if(result[i]==true)
cout << a[i].id << " ";
}
}
int main()
{
int n;
cin >> n;
struct time greedy[n];
for(int i=0; i<n; i++)
{
greedy[i].id = i;
cin >> greedy[i].startTime >> greedy[i].endTime;
}
sort(greedy, greedy+n, compare);
GreedySelect(n, greedy);
return 0;
}
/*
#include <algorithm>
using namespace std;
struct time // this struct is used to store the information of meeting
{
int id;
int startTime;
int endTime;
};
bool compare(struct time &a, struct time &b) //compare the object of struct time
{
return a.endTime <= b.endTime; //sort by ending time of greedy
}
void GreedySelect(int n, struct time a[])
{
bool result[n]; //store the result of schedule
for(int i=0; i<n; i++)
result[i] = false;
int i, j;
result[0] = true;
j=0;
i=1;
while(i<n)
{
if(a[i].startTime>a[j].endTime)
{
result[i] = true;
j=i;
}
else
result[i] = false;
i++;
}
for(int i=0; i<n; i++)
{
//cout << result[i] << " ";
if(result[i]==true)
cout << a[i].id << " ";
}
}
int main()
{
int n;
cin >> n;
struct time greedy[n];
for(int i=0; i<n; i++)
{
greedy[i].id = i;
cin >> greedy[i].startTime >> greedy[i].endTime;
}
sort(greedy, greedy+n, compare);
GreedySelect(n, greedy);
return 0;
}
/*
the first one is the number of meeting,it is starting time and ending time the next
11
1 4
3 5
0 6
5 7
3 8
5 9
6 10
8 11
8 12
2 13
12 14
*/
11
1 4
3 5
0 6
5 7
3 8
5 9
6 10
8 11
8 12
2 13
12 14
*/