Cod sursa(job #2590847)

Utilizator niculaandreiNicula Andrei Bogdan niculaandrei Data 29 martie 2020 05:31:55
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>
#define N_MAX 100005

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

int N, v[N_MAX];
int k, q[N_MAX], pos;
int pre[N_MAX];

int Search(int x)
{
    int le = 1, ri = k, mid, best = 1;
    while (le < ri)
    {
        mid = (le + ri) / 2;
        if (v[q[mid]] >= x)
        {
            best = mid;
            ri = mid - 1;
        }
        else
            le = mid + 1;
    }
    return best;
}

void afis(int pos)
{
    if (pre[pos])
        afis(pre[pos]);
    fout << v[pos] << " ";
}

int main()
{
    fin >> N;
    for (int i = 1; i <= N; i++)
    {
        fin >> v[i];
        if (v[i] > v[q[k]])
            pos = ++k;
        else
            pos = Search(v[i]);
        q[pos] = i;
        pre[i] = q[pos - 1];
    }
    fout << k << "\n";
    afis(q[k]);
    return 0;
}