Cod sursa(job #873689)

Utilizator miha88Popescu Mihaela miha88 Data 7 februarie 2013 15:59:20
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,i,k,p,x[100002],v[100002],l[100002],max1,nr,ind[100002];
int pozitie(int p, int u, int a)
{
    int mij;
    while (p<=u)
    {
        mij=(u-p)/2+p;
        if(a==v[mij])
            return mij;
        if(a<v[mij])
            u=mij-1;
        if(a>v[mij])
            p=mij+1;
    }
    return p;
}
int main()
{
    f>>n;
    // k=0 -> numarul de elemente din v
    for(i=1;i<=n;i++)
    {
        f>>x[i];
        p=pozitie(1,k,x[i]);
        v[p]=x[i];
        if(p>=k)
            k=p;
        l[i]=p;
        if(k>max1)
            {max1=k; nr=i;}
    }
    k=max1;
    ind[k]=x[nr];
    for(i=nr-1;i>=1;i--)
    {
        if(l[i]==k-1 && x[i]<ind[k])
            {ind[k-1]=x[i]; k--;}
    }
    g<<max1<<'\n';
    for(i=1;i<=max1;i++)
    g<<ind[i]<<' ';
    return 0;
}