Cod sursa(job #3265256)

Utilizator mateistefan11matei stefan mateistefan11 Data 28 decembrie 2024 14:18:16
Problema Subsir crescator maximal Scor 55
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[100003], n, lis[100003], m;
void CautBin(int x)
{
    if (x < lis[1]) {lis[1] = x; return; }
    if (lis[m] < x) {lis[++m] = x; return; }
    int st, dr, p, mij;
    st = 1; dr = p = m;
    while (st <= dr)
    {
        mij = (st + dr) / 2;
        if (x < lis[mij])
        {
            p = mij; dr = mij - 1;
        }
        else st = mij + 1;
    }
    lis[p] = x;
}

int main()
{
    int i, j, mx, p, k = 0;
    fin >> n;
    for (i = 1; i <= n; i++)
        fin >> a[i];
    lis[1] = a[1];
    m = 1;
    for (i = 2; i <= n; i++)
        CautBin(a[i]);
    fout << m << "\n";
    for(i = 1; i <= m; i++)
        fout << lis[i] << " ";
    return 0;
}