Cod sursa(job #1375722)

Utilizator radarobertRada Robert Gabriel radarobert Data 5 martie 2015 14:06:37
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>

using namespace std;

const int MAXN = 100003;

int x[MAXN], m[MAXN], p[MAXN];

FILE *out = fopen("scmax.out", "w");

void afis(int i)
{
    if (i == 0)
        return;
    afis(p[i]);
    fprintf(out, "%d ", x[i]);
}

int main()
{
    FILE *in = fopen("scmax.in", "r");

    int n;
    fscanf(in, "%d", &n);
    for (int i = 1; i <= n; i++)
        fscanf(in, "%d", &x[i]);

    int l = 1;
    m[1] = 1;
    for (int i = 2; i <= n; i++)
    {
        int left = 1;
        int right = l;
        while (left <= right)
        {
            int mid = (left+right+1)/2;
            if (x[m[mid]] < x[i])
                left = mid+1;
            else
                right = mid-1;
        }

        p[i] = m[left-1];
        m[left] = i;

        if (left > l)
            l = left;
    }

    fprintf(out, "%d\n", l);
    afis(m[l]);
    fprintf(out, "\n");

    return 0;
}