经典贪心模型,按照右端点从小到大排序。注意同一个位置只能放一个。
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const int INF =0x3f3f3f3f;
const int maxn= 1000 ;
int n;
struct Seg
{
int le,ri,ind;
bool operator<(const Seg y)const
{
return ri<y.ri;
}
}a[maxn+5];
int main()
{
while(~scanf("%d",&n)&&n)
{
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].le,&a[i].ri);
a[i].ind=i;
}
sort(a+1,a+1+n);
int now=a[1].ri+1;//一个位置不能有两个外显子同时占用
cout<<a[1].ind;
for(int i=2;i<=n ;i++)
{
if(a[i].le < now ) continue;
now=a[i].ri+1;
cout<<" "<<a[i].ind;
}
cout<<endl;
}
return 0;
}