Pagini recente » Diferente pentru implica-te/arhiva-educationala intre reviziile 50 si 51 | Monitorul de evaluare | Istoria paginii runda/simulare-cartita-34 | Istoria paginii runda/asdfasdgs | Cod sursa (job #203708)
Cod sursa(job #203708)
#include<stdio.h>
const int N=5010;
const int INF=1100001000;
int v[N],lung[N],urm[N],n;
bool prim[N];
void citire(){
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&v[i]);
}
void calcul(){
int min;
lung[n]=1;
for(int i=n-1;i;--i){
lung[i]=N;
min=INF;
for(int j=i+1;j<=n;++j)
if(v[i]<=v[j]){
prim[j]=true;
if(v[j]<=min){
if((lung[j]==lung[i] && v[j]<v[urm[i]]) || (lung[j]<lung[i])){
lung[i]=lung[j];
urm[i]=j;
}
min=v[j];
}
}
if(lung[i]==N)
lung[i]=1;
else
++lung[i];
}
int x=1;
for(int i=2;i<=n;++i)
if(!prim[i])
if((lung[i]==lung[x] && v[i]<v[x]) || (lung[i]<lung[x]))
x=i;
printf("%d\n%d",lung[x],x);
x=urm[x];
while(x){
printf(" %d",x);
x=urm[x];
}
printf("\n");
}
int main(){
freopen("subsir2.in","r",stdin);
freopen("subsir2.out","w",stdout);
citire();
calcul();
return 0;
}