Cod sursa(job #1333181)

Utilizator alexmisto342Turdean Alexandru alexmisto342 Data 2 februarie 2015 21:16:29
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[100001],w[100001],p[100001],i,j,n,ld,ls,mij,m,k;
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>v[i];

        if(v[i]<w[m])
        {
            ls=1;ld=m;
            while(ld>ls)
            {
                mij=(ld+ls)/2;
                if(w[mij]==v[i])
                {
                    p[i]=p[mij];break;
                }

                else
                if(w[mij]>v[i])
                    {ld=mij-1;}
                else
                    ls=mij+1;
            }
            if(ld<=ls)
            {while(w[ld]<v[i])
                ld++;
                w[ld]=v[i];
                p[i]=ld;
            }
        }
        if(v[i]>w[m])
        {
            m++;
            w[m]=v[i];
            p[i]=m;

        }
    }i=n;
    fout<<m<<"\n";n=m;
    while(m)
    {
        if(p[i]==m)
        {
            w[m]=v[i];
            m--;
        }
        i--;
    }
    for(i=1;i<=n;i++)
        fout<<w[i]<<" ";

    return 0;
}