Cod sursa(job #1787434)

Utilizator alexsandulescuSandulescu Alexandru alexsandulescu Data 24 octombrie 2016 17:43:56
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>

using namespace std;

ifstream f ("scmax.in");
ofstream g ("scmax.out");

long long N, kp, kq, j, a[100003], poz[100003], q[100003], aux, SOL;
void put(long long x, long long i) {
    long long st = 1, dr = kq, mij = 0;
    while(st <= dr) {
        mij = (st + dr) / 2;
        if(x > q[mij])       st = mij + 1;
        else                 dr = mij - 1;
    }
    while(q[st] < x && q[st]) st++;
    q[st] = x, kq = max(kq, (long long)st), poz[++kp] = st;
}
int main()
{
    f >> N;
    for(long long i = 1; i <= N; i++) f >> a[i];
    for(long long i = 1; i <= N; i++)
        put(a[i], i);
    g << kq << "\n";
    j = kp, aux = kq;
    for(aux; aux >= 1; j--)
        if(poz[j] == aux)
            a[++SOL] = q[poz[j]], aux--;
    for(int i = SOL; i >= 1; i--) g << a[i] << " ";
    g << "\n";
    return 0;
}