Cod sursa(job #2906415)

Utilizator StefanL2005Stefan Leustean StefanL2005 Data 25 mai 2022 23:45:50
Problema Subsir crescator maximal Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;

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

int caut(vector<int> V, int t, int c1, int c2)
{
    int ans = 0;
    while (c2 >= c1)
    {
        int m = (c1 + c2) / 2;
        if (t > V[m])
            c1 = m + 1;
        else
        {
            c2 = m - 1;
            ans = m;
        }
    }
    if (t <= V[ans])
        return ans;
    else
        return -1;
}
int main()
{
    int n, h;
    in>> n;
    vector<int> v(n), Lmin, sir;

    for (int i = 0; i < n; i++)
        in>> v[i];

    Lmin.push_back(v[0]);
    int nr = 1;

    for (int i = 1; i < n; i++)
    {
        int poz = caut(Lmin, v[i], 0, nr - 1);

        if (poz == -1)
        {
            Lmin.push_back(v[i]);
            nr++;
            h = i;
            sir = Lmin;
        }
        else
            Lmin[poz] = v[i];
    }

    out<< nr << "\n";

    int l, c1 = 0, c2 = 1;

    vector<int> Min;
    for (int i = 0; i <= h; i++)
        if (v[i] <= v[h])
            Min.push_back(v[i]);

    l = Min.size();

    for (int i = 0; i < l && c2 < nr; i++)
    {
        if (Min[i] >= sir[c1] && Min[i] <= sir[c2])
        {
            out<< Min[i] << " ";
            c1++;
            c2++;
        }
    }

    out<< v[h];


    return 0;
}