Pagini recente » Cod sursa (job #1005240) | Cod sursa (job #2728990) | Cod sursa (job #771755) | Cod sursa (job #1120119) | Cod sursa (job #1996383)
#include<cstdio>
#include<algorithm>
using namespace std;
const int nmax=100005;
int v[nmax],d[nmax],t[nmax];
bool used[nmax];
int main()
{
freopen("subsir2.in","r",stdin);
freopen("subsir2.out","w",stdout);
int n,i,j;
scanf("%d",&n);
for(i=1;i<=n;++i)
scanf("%d",&v[i]);
int minim,maxim;
d[n]=1;
t[n]=-1;
for(i=n-1;i;--i)
{
maxim=0;
minim=1000005;
for(j=i+1;j<=n;++j)
if(v[i]<=v[j])
{
used[j]=1;
if(v[j]<minim)
{
if(maxim==0||d[maxim]>d[j])
maxim=j;
else if(d[j]==d[maxim]&&v[j]<v[maxim])
maxim=j;
}
minim=min(minim,v[j]);
}
if(maxim==0)
d[i]=1,t[i]=-1;
else
d[i]=d[maxim]+1,t[i]=maxim;
}
maxim=0;
for(i=1;i<=n;++i)
if(!used[i])
{
if(maxim==0||d[i]<d[maxim])
maxim=i;
else if(d[i]==d[maxim]&&v[i]<v[maxim]);
maxim=i;
}
printf("%d\n",d[maxim]);
while(maxim!=-1)
{
printf("%d ",maxim);
maxim=t[maxim];
}
}