Cod sursa(job #921791)

Utilizator albucristian64Albu Dumitru Cristian albucristian64 Data 21 martie 2013 13:47:44
Problema Subsir crescator maximal Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <cstdio>
bool gasit;
int v[100010], p[100010], q[100010], i, j, v1[100010], last, n;
int main()
{
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    scanf("%d", &n);
    for(i=1;i<=n;i++)
    {
        scanf("%d", &v[i]);
        gasit=false;
        for(j=1;j<=q[0];j++)
            if(q[j]>v[i])
            {
                q[j]=v[i];
                p[i]=j;
                gasit=true;
                break;
            }
            else
                if(q[j]==v[i])
                {
                    gasit=true;
                    break;
                }
        if(!gasit)
        {
            q[++q[0]]=v[i];
            p[i]=q[0];
        }
    }
    printf("%d\n", q[0]);
    i=q[0]; last=n;
    while(i>0)
    {
        for(j=last;j>=1;j--)
            if(p[j]==i)
            {
                v1[++v1[0]]=v[last];
                last=j-1;
                i--;
                break;
            }
    }
    for(i=v1[0];i>=1;i--)
        printf("%d ", v1[i]);
    printf("\n");
    return 0;
}