Cod sursa(job #1429371)

Utilizator grimmerFlorescu Luca grimmer Data 6 mai 2015 10:46:47
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <iostream>
#include <fstream>
using namespace std;
int n,mic[100001],v[100001],pred[100001],nr;
ifstream in("scmax.in");
ofstream out("scmax.out");
int caut_bin(int x)
{
    int i=0, pas=(1<<17);
    while(pas!=0)
    {
        if(i+pas<=nr && v[mic[i+pas]]<x)
            i+=pas;
        pas>>=1;
    }
    return i;
}
void subsir(int p)
{
    if (pred[p] != 0)
        subsir(pred[p]);
    out << v[p] << " ";
}

int main()
{
    int i,j;
    in>>n;
    for(i=1;i<=n;i++)
        in>>v[i];
    nr=0;
    mic[++nr] = 1;
    for(i=2;i<=n;i++){
        j=caut_bin(v[i]);
        pred[i] = mic[j];
        mic[j+1] = i;
        if(j == nr) nr++;
    }
    out<<nr<<'\n';
    subsir(mic[nr]);
    return 0;
}