Cod sursa(job #1767721)

Utilizator BogdanNeghinaNeghina Bogdan BogdanNeghina Data 29 septembrie 2016 17:18:00
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,j,v[100001],maxim,poz[100001],p,u,mij,sol[100001],ant[100001],m,t;
int k;
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];
    for(i=1;i<=n;i++)
    {
        p=1;u=k;
        // caut binar pozitia lui v[i] in sirul poz[i] care are k elem
        while(p<=u)
        {
            mij=(p+u)/2;
            if(v[i]==v[poz[mij]])
            {
                p=mij;
                break;
            }
            else
                if(v[i]>v[poz[mij]])
                    p=mij+1;
                else
                    u=mij-1;

        }
        poz[p]=i;
        ant[i]=poz[p-1];
        if(p>k)
            k++;
    }
    fout<<k<<"\n";
    sol[1]=poz[k];
    m++;
    t=poz[k];
    while(ant[t]!=0)
    {
        t=ant[t];
        sol[++m]=t;
    }
    for(i=m;i>=1;i--)
        fout<<v[sol[i]]<<" ";
    return 0;
}