Cod sursa(job #1162206)

Utilizator florin.ilieFlorin Ilie florin.ilie Data 31 martie 2014 18:22:44
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <iostream>

using namespace std;

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

int sol[100003],ind[100003],best[100003],sir[100003],n,nr,maxim,poz;


void afisare (int x){
    if(ind[x]>0)
        afisare(ind[x]);
    fout<<sir[x]<<' ';
}
int caut (int x){
    int p=0;
    int u=nr;
    int m=(p+u)/2;
    while(p<=u){
        if(sir[sol[m]]< x && x<=sir[sol[m+1]])
            return m;
        else if(sir[sol[m+1]]<x)
            p=m+1;
        else
            u=m-1;
        m=(p+u)/2;
    }
    return nr;
}

int main ()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>sir[i];
    nr=1;
    best[1]=sol[1]=1;
    best[0]=0;
    for(int i=2;i<=n;i++){
        poz = caut(sir[i]);
        ind[i] = sol[poz];
        best[i] = poz+1;
        sol[poz+1] = i;
        if(nr<poz+1)
            nr=poz+1;
    }
    for(int i=1;i<=n;i++)
        if(maxim<best[i]){
            maxim=best[i];
            poz=i;
        }
    fout<<maxim<<'\n';
    afisare(poz);
    fout<<'\n';
    return 0;
}