Cod sursa(job #2496826)

Utilizator Ykm911Ichim Stefan Ykm911 Data 21 noiembrie 2019 18:21:59
Problema Subsir 2 Scor 38
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>

using namespace std;

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

int a[5005], lis[5005], n, k, ind[5005];

int CautBin(int x)
{
    int st = 1, dr = k, poz = 1, mij;
    while(st <= dr)
    {
        mij = (st + dr) / 2;
        if(a[mij] <= x)
        {
            poz = mij;
            st = mij + 1;
        }
        else dr = mij - 1;
    }
    return poz;
}


int main()
{
    fin >> n;
    for(int i = 1; i <= n; i++)
        fin >> a[i];
    lis[++k] = a[1];
    ind[k] = 1;
    for(int i = 2; i <= n; i++)
    {
        int x = a[i];
        if(x > lis[k])
        {
            lis[++k] = x;
            ind[k] = i;
        }
        else
        {
            int p = CautBin(x);
            if(x < lis[p + 1])
            {
                lis[p + 1] = x;
                ind[p + 1] = i;
            }
        }
    }
    fout << k << "\n";
    for(int i = 1; i <= k; i++)
        fout << ind[i] <<" ";
    return 0;
}