Cod sursa(job #2131415)

Utilizator heeiyyoosarateanu armand heeiyyoo Data 14 februarie 2018 18:13:21
Problema Subsir crescator maximal Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");


int v[100001],lon[100001],pred[100001],val[100001],pz[100001],n,m;
int cautb(int x)
{
    int r=0,pas=1<<16;
    while(pas!=0)
    {
        if(r+pas<=m && val[r+pas]<x)
        {
            r+=pas;
        }
        pas/=2;
    }
    return r;

}

void subsir(int p)
{
    if(pred[p]!=0)
    {
        subsir(pred[p]);
    }
    out<<v[p]<<" ";
}





int main()
{
    in>>n;
    for(int i=1; i<=n; i++)
        in>>v[i];
    m=0;
    for(int i=0; i<n; i++)
    {
        int j=cautb(v[i]);
        if(j==m)
        {
            m++;
        }
        val[j+1]=v[i];
        pz[j+1]=i;
        lon[i]=j+1;
        pred[i]=pz[j];

    }
    out<<m<<"\n";
    subsir(pz[m]);
    return 0;
}