Cod sursa(job #1861626)

Utilizator LolkekzorChiorean Tudor Lolkekzor Data 29 ianuarie 2017 09:54:22
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>

using namespace std;

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

#define INF 1999999999

int n, i, j, len, st, dr, mij, spot, s1, s2;
int a[100010], d[100010], path[100010];

int main()
{
    F >> n;
    for(i = 1; i <= n; ++ i)
        F >> a[i];

    len = 1;
    for (j = 1 ; j <= n ; j++) d[j] = INF;

    for (j = 1 ; j <= n ; j++) {
        st = 1; dr = len + 1;
        spot = -INF;
        while (st <= dr) {
            mij = (st + dr) / 2;
            if (d[mij] == INF || a[j] <= a[d[mij]]) {
                spot = mij;
                dr = mij - 1;
            } else {
                st = mij + 1;
            }
        }
        d[spot] = j;
        path[spot] = d[spot - 1];
        len = max(len, spot);
    }

    G << len << '\n';
    for (i = 1 ; i <= len ; i++) {
        G << a[d[i]] << ' ';
    }

    return 0;
}