Cod sursa(job #1550131)

Utilizator RaduHHarhoi Radu RaduH Data 13 decembrie 2015 11:55:32
Problema Subsir crescator maximal Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,v[100010],s[100010],p[100010],ls,nr;
int caut_bin(int x)
{
    int st,i;
    for(st=1;st<=ls;st<<=1);
    for(i=0;st;st>>=1)
        if(i+st<=ls && s[st+i]<x)
            i+=st;
    return i+1;
}
void afisare(int nr, int i)
{
    if(i>0)
    {
        if(p[i]==nr)
        {
            afisare(nr-1,i-1);
            fout<<v[i]<<" ";
        }
        else
            afisare(nr,i-1);
    }
}
int main()
{
    fin>>n;
    ls=0;
    for(i=1;i<=n;i++)
    {
        fin>>v[i];
        if(ls==0)
        {
            s[1]=v[i];
            ls++;
            p[i]=1;
        }
        else
        {
            ls=caut_bin(v[i]);
            s[ls]=v[i];
            p[i]=ls;
        }
        nr=max(nr,p[i]);
    }
    fout<<nr<<'\n';
    afisare(nr,n);
    fin.close();
    fout.close();
    return 0;
}