Pagini recente » Cod sursa (job #3131602) | tema | Cod sursa (job #2113501) | Istoria paginii runda/preoji.bdc.19 | Cod sursa (job #330999)
Cod sursa(job #330999)
#include <stdio.h>
#define N 100005
int n,v[N],best[N],pre[N],sol[N],rez,poz,r;
/* -v[i]=elem de pe poz i
-best[i]=lungimea maxima pt un subsir care se termina in poz i
-pre[i]=pozitia valorii care preceda elementul i in subsirul
crescator care se termina pe pozitia i*/
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int i,j,max;
scanf("%d",&n);
for (i=1; i<=n; i++)
{
scanf("%d",&v[i]);
max=0;
for (j=i-1; j>=1; j--)
if (v[j]<v[i] && best[j]>max)
{
max=best[j];
pre[i]=j;
}// in forul asta am cautat ub subsir cu elementele strict mai mici ca v[i]
best[i]=max+1; //adaug in subsirul gasit elementul actual, v[i]
if (best[i]>rez)
{
rez=best[i];//actualizez variabila care retine cel mai bun subsir gasit pana acum si pozitia pe care se afla
poz=i;
}
}
printf("%d\n",rez);
while (poz)
{
sol[++r]=v[poz];//aici parcurg subsirul cel mai bun gasit de la pozitia cea mai din dreapta la cea mai din stanga
poz=pre[poz];
}
for (i=r; i>=1; i--)//afisarea
printf("%d ",sol[i]);
return 0;
}