Cod sursa(job #1349729)

Utilizator cypry97Dascalitei Ciprian cypry97 Data 20 februarie 2015 13:59:47
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int n,lmax;
int v[100001];
int m[100001];
int t[100001];


void citire()
{
    in>>n;
    for(int i=1; i<=n; i++)
        in>>v[i];
}

void af_rec(int x)
{
    if(t[x])
        af_rec(t[x]);
    out<<v[x]<<' ';

}

void rezolvare()
{
    int i;
    int b,e,mid;
    t[1]=0;
    m[1]=1;
    lmax=1;
    v[0]=2000000010;
    for(i=2;i<=n;i++)
    {
        b=1;
        e=lmax;
        while(b!=e)
        {
            mid=(b+e)/2;
            if(v[i]>=v[m[mid]])
                b=mid+1;
            else
                e=mid-1;
        }
        if(v[m[b]]>=v[i])
            b--;
        if(b==lmax)
            lmax++;
        if(v[m[b+1]]>v[i])
            m[b+1]=i;
        t[i]=m[b];
    }
    out<<lmax<<'\n';
    af_rec(m[lmax]);
}

int main()
{
    citire();
    rezolvare();
    return 0;
}