Cod sursa(job #1165674)

Utilizator alevasluialeHuhurez Marius alevasluiale Data 2 aprilie 2014 20:20:24
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>
#define maxn 100001
int a[maxn], x[maxn],p[maxn],poz[maxn],sol[maxn];
int n;
void solve()
{
            x[1]=a[1];
            poz[1]=1;
            int nr=1,j,v,i,cnt;

            for(i=2;i<=n;++i)
            {
                        v=a[i];

                        for(j=1,cnt=(1<<18); cnt; cnt>>=1)
                                    if(j+cnt<=nr)
                                    if(x[j+cnt]<v) j+=cnt;

                        if(x[j]<v) ++j;
                        if(j>nr) nr=j;
                        x[j]=v;
                        p[i]=poz[j-1];
                        poz[j]=i;
            }

            freopen("scmax.out","w",stdout);
            printf("%d\n", nr);
            int N=0;
            for(i=poz[nr]; i; i=p[i])sol[++N]=a[i];

            for(i=N;i>=1;--i)printf("%d ", sol[i]);
            printf("\n");


}
int main()
{
            freopen("scmax.in","r",stdin);
            scanf("%d\n", &n);
            for(int i=1;i<=n;++i) scanf("%d ", a+i);

            solve();
            return 0;
}