第一维排序,第二维下降自序列,输出方案。
1A
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int>pii;
typedef pair<pii,int>piii;
void Gao()
{
vector<piii>a;
int x,y,tt=1;
int f[2000]={0};
int pre[2000]={-1};
while (scanf("%d%d",&x,&y)!=EOF)
a.push_back(make_pair(make_pair(x,y),tt++));
sort(a.begin(),a.end());
for (int i=0;i<a.size();i++)
{
for (int j=0;j<i;j++)
{
if (a[i].first.first>a[j].first.first && a[i].first.second<a[j].first.second)
{
if (f[j]>f[i])
{
pre[i]=j;
f[i]=f[j];
}
}
}
f[i]+=1;
}
int ans=0,p=0;
for (int i=0;i<a.size();i++)
{
if (f[i]>ans)
{
ans=f[i];
p=i;
}
}
cout<<ans<<endl;
vector<int>as;
while (p!=-1)
{
as.push_back(p);
p=pre[p];
}
for (int i=ans-1;i>=0;i--)
cout<<a[as[i]].second<<endl;
//<<" "<<a[as[i]].first.first<<" "<<a[as[i]].first.second<<endl;
}
int main()
{
//freopen("a.in","r",stdin);
Gao();
return 0;
}