Cod sursa(job #2364432)

Utilizator butasebiButa Gabriel-Sebastian butasebi Data 4 martie 2019 08:32:15
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda pregatire_cls12_oji Marime 1.06 kb
#include<bits/stdc++.h>
#define INF 2000000001
using namespace std;
int SCLM[100005], sclm[100005], sir[100005], v[100005], pred, curent, i, n, m, mij, st, dr, poz, k;
int main()
{
    ifstream f("scmax.in");
    ofstream g("scmax.out");
    f >> n;
    for(i = 1; i <= n; i ++)
        f >> v[i];
    for(i = 1; i <= n; i ++)
    {
        if(v[i] > sir[k])sir[++k] = v[i], sclm[i] = k;
        else
        {
            st = 1;
            dr = k;
            poz = 0;
            while(st <= dr)
            {
                mij = (st + dr) / 2;
                if(sir[mij] >= v[i])poz = mij, dr = mij - 1;
                else st = mij + 1;
            }
            sir[poz] = v[i];
            sclm[i] = poz;
        }
    }
    pred = INF;
    curent = k + 1;
    g << k << "\n";
    for(i = n; i > 0; i --)
        if(sclm[i] == curent - 1 && v[i] < pred)
        {
            curent--;
            SCLM[curent] = v[i];
            pred = v[i];
        }
    for(i = 1; i <= k; i ++)
        g << SCLM[i] << " ";
    return 0;
}