Pagini recente » Cod sursa (job #2323809) | Cod sursa (job #1718395) | Cod sursa (job #283835) | Cod sursa (job #2755857) | Cod sursa (job #493947)
Cod sursa(job #493947)
#include<cstdio>
int n,a[6000],lung[6000],next[6000];
void read()
{
freopen("subsir2.in","r",stdin);
freopen("subsir2.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
}
void df(int x)
{
printf("%d ",x);
if(next[x]!=-1)
df(next[x]);
}
void solve()
{
lung[n]=1;
next[n]=-1;
for(int i=n-1;i>=1;i--)
{
int min=1<<30,MIN=1<<30,pmin=0;
for(int j=i+1;j<=n;j++)
if(a[j]>=a[i])
{
if(lung[j]<MIN && a[j]<min)
MIN=lung[j], pmin=j;
if(lung[j]==MIN && a[j]<a[pmin] && a[j]<min)
pmin=j;
if(a[j]<min)
min=a[j];
}
lung[i]=lung[pmin]+1;
next[i]=pmin;
}
int MIN=1<<30,min=1<<30,pmin;
for(int i=1;i<=n;i++)
{
if(lung[i]<MIN && a[i]<min)
MIN=lung[i], pmin=i;
if(lung[i]==MIN && a[i]<a[pmin])
pmin=i;
if(a[i]<min)
min=a[i];
}
printf("%d\n",lung[pmin]);
df(pmin);
}
int main()
{
read();
solve();
return 0;
}