Cod sursa(job #1292974)

Utilizator cldmeClaudiu Ion cldme Data 15 decembrie 2014 07:58:21
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>
using namespace std;
ifstream in ("scmax.in");
ofstream out ("scmax.out");
int const N=100001;
int v[N],vmin[N],pred[N],nr;

int caut(int x)
{
    int i,pas=1<<16;
    for(i=0;pas!=0;pas/=2)
    {
        if(i+pas<=nr && v[vmin[i+pas]]<x)
            i+=pas;
    }
    return i;
}

int afisare(int i)
{
    if(pred[i]>0) afisare(pred[i]);
    out<<v[i]<<" ";
}

int main()
{
    int i,j,n,p;
    in>>n;
    for(i=1;i<=n;i++)
        in>>v[i];
    vmin[1]=1;
    nr=1;
    for(i=2;i<=n;i++)
    {
        j=caut(v[i]);
        pred[i]=vmin[j];
        vmin[j+1]=i;
        if(j==nr)
            nr++;
    }
    out<<nr<<"\n";
    afisare(vmin[nr]);
    return 0;
}