Pagini recente » Cod sursa (job #1734366) | Cod sursa (job #2489447) | Cod sursa (job #2043497) | Borderou de evaluare (job #1691036) | Cod sursa (job #1458037)
#include<cstdio>
struct eu{int nr,val,pr;};
eu v[50001];
int i,n,j,m,k,poz,mx=50000,cate,vc[50001];
int main ()
{
freopen("subsir2.in","r",stdin);
freopen("subsir2.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i].val);
v[1].pr=0;
v[1].nr=1;
for(i=2;i<=n;i++)
{
int min=1000000,max=-1000000000,pr=0;
for(j=i-1;j>=1;j--)
{
if(v[j].val<v[i].val&&v[j].val>max&&v[j].nr<min)
{
min=v[j].nr;
max=v[j].val;
pr=j;
}
if(v[j].val<v[i].val&&v[j].val>max)
max=v[j].val;
}
v[i].nr=min+1;
v[i].pr=pr;
}
for(i=1;i<=n;i++)
{
int pp=0;
if(i!=n)
for(j=i+1;j<=n;j++)
if(v[j].val>v[i].val)
{
pp=1;
break;
}
if(pp==0&&v[i].nr<mx)
{
mx=v[i].nr;
poz=i;
}
}
printf("%d\n",mx);
while(v[poz].pr!=0)
{
vc[++cate]=poz;
poz=v[poz].pr;
}
vc[++cate]=poz;
for(i=mx;i>=1;i--)
printf("%d ",vc[i]);
return 0;
}