Cod sursa(job #1647876)

Utilizator vladdy47Bucur Vlad Andrei vladdy47 Data 10 martie 2016 22:34:17
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
# include <bits/stdc++.h>

using namespace std;

const int Nmax = 100000 + 5;

int n, m, a[Nmax], sol[Nmax], poz[Nmax], q[Nmax], i, N;

int cautbin(int x)
{
    int st = 1, dr = m, mij;
    while (st <= dr)
    {
        mij = (st + dr) / 2;
        if (q[mij] == x) return mij;
        else if (x > q[mij]) st = mij + 1;
        else dr = mij - 1;

    }

    return st;
}

int main ()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);

    scanf("%d\n", &n);

    for (i = 1; i <= n; ++i)
        scanf("%d ", &a[i]);

    q[1] = a[i], poz[i] = 1, m = 1;

    for (i = 2; i <= n; ++i)
    {
        poz[i] = cautbin(a[i]);
        q[poz[i]] = a[i];
        if (poz[i] > m) ++m;
    }

    for (i = n; i >= 1; --i)
        if (poz[i] == m) sol[++N] = a[i], --m;

    for (i = N; i >= 1; --i)
        printf("%d ", sol[i]);

    return 0;
}