Mai intai trebuie sa te autentifici.
Cod sursa(job #1264794)
Utilizator | Data | 16 noiembrie 2014 11:53:18 | |
---|---|---|---|
Problema | Subsir crescator maximal | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.82 kb |
#include <stdio.h>
long int a[100000],b[100000],c[100000];
int n,k,m;
int cautare(int x)
{
if(!m)
{
m++;
return 0;
}
if(a[x]>a[b[m-1]])
{
m++;
return m-1;
}
int i,step;
for(step=1;step<m;step<<=1);
for(i=m-1;step;step>>=1)
if(i-step>=0 && a[b[i-step]]>=a[x])
i-=step;
return i;
}
void afisare(int q, int w)
{
if(q+1)
{
afisare(q-1,c[w]);
printf("%d ", a[w]);
}
}
int main()
{
int i;
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for(i=0;i<n;i++)
{
scanf("%d", &a[i]);
k=cautare(i);
b[k]=i;
c[i]=b[k-1];
}
printf("%d\n", m);
afisare(m-1,b[m-1]);
return 0;
}