Pagini recente » Cod sursa (job #2043449) | Cod sursa (job #9255) | Cod sursa (job #232537) | Cod sursa (job #2989198) | Cod sursa (job #1713268)
#include <cstdio>
#include <algorithm>
#define MAX 2000000
#define INF 200000005
using namespace std;
char f[MAX];
int Pos=0,size[100005]={},bef[100005]={},N,v[100005]={},used[100005]={},L,M,P;
void r(int &nr)
{
nr=0;
while(f[Pos]<'0'||f[Pos]>'9')
Pos++;
while(f[Pos]>='0'&&f[Pos]<='9')
nr=nr*10+f[Pos++]-'0';
}
int main()
{
freopen("subsir2.in","r",stdin);
freopen("subsir2.out","w",stdout);
//fread(f,1,MAX,stdin);
scanf("%d",&N);
for(int i=1;i<=N;i++)
scanf("%d",&v[i]);
for(int i=N;i>0;i--)
{
size[i]=INF,bef[i]=0,P=0,M=INF;
for(int j=i+1;j<=N;j++)
{
if(v[i]<v[j])
{
if(P==0||v[P]>v[j])P=j;
if(v[j]<M&&size[i]>size[j]+1||(size[i]==size[j]+1&&v[P]<v[bef[i]]))size[i]=size[j]+1,bef[i]=j;
if(v[j]<M)M=v[j];
}
}
if(size[i]==INF)size[i]=1,bef[i]=0;
}
M=INF,Pos=1;
for(int i=1;i<=N;i++)
if(M>v[i])
{
M=v[i];
if(size[i]<size[Pos]||(size[i]==size[Pos]&&v[i]<v[Pos]))
Pos=i;
}
printf("%d\n%d ",size[Pos],Pos);
while(bef[Pos]>0)
{
printf("%d ",bef[Pos]);
Pos=bef[Pos];
}
return 0;
}