Cod sursa(job #1510382)

Utilizator sebinechitasebi nechita sebinechita Data 24 octombrie 2015 21:40:18
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
#define MAX 100010
#define INF 2000000100
int p[MAX], a[MAX], r[MAX], n, i, vf, st, dr, ok;

void f(int i)
{
    if(i)
    {
        f(p[i]);
        fout << a[i] << " ";
    }
}

int main()
{
    fin >> n;
    for(i = 1 ; i <= n ; i++)
    {
        fin >> a[i];
    }
    a[0] = -INF;
    a[n + 1] = INF;
    r[0] = 0;
    for(i = 1 ; i <= n ; i++)
        r[i] = n + 1;
    vf = 0;
    for(i = 1 ; i <= n ; i++)
    {
        st = 0;
        dr = vf;
        while(st <= dr)
        {
            int mij = (st + dr) >> 1;
            if(a[r[mij]] < a[i])
            {
                ok = mij;
                st = mij + 1;
            }
            else
                dr = mij - 1;
        }
        p[i] = r[ok];
        r[ok + 1] = i;
        vf = max(vf, ok + 1);
    }
    fout << vf << "\n";
    f(r[vf]);
}