Cod sursa(job #1647393)

Utilizator sebinechitasebi nechita sebinechita Data 10 martie 2016 20:23:18
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
#define MAX 100010
#define INF 2001000000
int a[MAX], rez[MAX], p[MAX], val[MAX];

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