Cod sursa(job #3172840)

Utilizator AndreeaDinuDinu Andreea Irina AndreeaDinu Data 21 noiembrie 2023 12:59:36
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int main()
{
    int n, i, d, st, dr, poz, j;
    fin >> n;
    d = 1;
    int v[n + 1], sir[n + 1], p[n + 1];
    for(i = 1; i <= n; i ++)
        fin >> v[i];
    sir[1]=v[1];
    p[1]=1;
    for(i = 2; i <= n; i ++)
    {
        if(v[i] > sir[d]) ///pun la final;
        {
            d ++;
            sir[d] = v[i];
            p[i] = d;
        }
        else
        {
            st = 1;
            dr = d;
            poz = d + 1;
            while(st <= dr)
            {
                int m = ( st + dr ) / 2;
                if(sir[m] >= v[i])
                {
                    poz = m;
                    dr = m - 1;
                }
                else
                    st = m + 1;
            }
            sir [poz] = v[i];
            p[i] = poz;
        }
    }
    fout << d << "\n";
    int indici[d + 1];
    j = n;
    for(i = d; i >= 1; i --)
    {
        while( p[j] != i )
                j--;
        indici[i] = j;
    }
    for( i = 1; i <= d; i ++)
        fout << v[indici[i]] << ' ';
    return 0;
}