Cod sursa(job #639185)

Utilizator gramatovici_paulGramatovici Paul gramatovici_paul Data 22 noiembrie 2011 18:13:19
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <iostream>
#include <fstream>
#define N 1100000
using namespace std;

int pred[N],a[N],v[N],lung;


ifstream in("scmax.in");
ofstream out("scmax.out");

void refa(int p)
{
    if (pred[p])
        refa(pred[p]);
    out<<v[p]<<" ";
}



int caut(int p)
{
    int i,pas=1<<16;
    for(i=0;pas;pas>>=1)
        if(i+pas<=lung && v[a[i+pas]]<p)
            i+=pas;
    return i+1;
}



int main()
{
    int i,n,p;
    in>>n;
    for(i=1;i<=n;++i)
    {
        in>>v[i];
    }
    for(i=1;i<=n;++i)
    {
        p=caut(v[i]);
        if(p>lung)
            ++lung;
        a[p]=i;
        pred[i]=a[p-1];
    }
    out<<lung<<"\n";
    refa(a[lung]);
}