Cod sursa(job #800090)
| Utilizator | Data | 20 octombrie 2012 18:39:01 | |
|---|---|---|---|
| Problema | Subsir 2 | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 1.47 kb |
#include<stdio.h>
int a[5001],v[5001],n,u,min,minl,p[5001],poz;
bool bif[5001];
FILE *fin,*fout;
void citire()
{
fin=fopen("subsir2.in","r");
fscanf(fin,"%d",&n);
for(int i=1;i<=n;i++)
{
fscanf(fin,"%d",&v[i]);
}
}
void afisare()
{
fout=fopen("subsir2.out","w");
fprintf(fout,"%d\n",min);
while(poz!=0)
{
fprintf(fout,"%d ",poz);
poz=p[poz];
}
}
int main()
{
citire();
for(int i=n;i>=1;i--)
{
min=1000001;
minl=n+1;
a[i]=1;
bif[i]=1;
for(int j=i+1;j<=n;j++)
{
if(v[j]>=v[i])
{
if(a[j]<minl && v[j]<min)
{
minl=a[j];
p[i]=j;
a[i]=a[j]+1;
}
else
if(a[j]==minl && v[j]<min && v[j]<v[p[i]])
{
p[i]=j;
}
if(v[j]<min)
{
min=v[j];
}
bif[j]=0;
}
}
}
min=n+1;
for(int i=1;i<=n;i++)
{
if(bif[i])
{
if(a[i]<min)
{
min=a[i];
poz=i;
}
else
if(a[i]==min && v[poz]>v[i])
{
poz=i;
}
}
}
afisare();
return 0;
}
