Cod sursa(job #3167588)

Utilizator andreea678Rusu Andreea-Cristina andreea678 Data 10 noiembrie 2023 21:02:22
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>

using namespace std;
int n, sir[100005], sol[100005],ind[100005],maxim,k=1;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void cautare(int x,int i) {
    int dr=k,st=1,mij=(dr+st)/2, poz=k+1;
    while (st<=dr) {
        mij=(dr+st)/2;
        if (sol[mij]>=x) {
            poz=mij;
            dr=mij-1;
        }
        else {
            st=mij+1;
        }
        sol[poz]=x;
        ind[i]=poz;
    }
}
int main()
{
    fin >> n;
    for (int i=1; i<=n; ++i) {
        fin >> sir[i];
    }
    //sol[0]=-1;
    sol[1]=sir[1];
    ind[1]=1;
    for (int i=1; i<=n; ++i) {
        if (sir[i]>sol[k]) {
            ++k;
            sol[k]=sir[i];
            ind[i]=k;

        }
        else {
            cautare(sir[i],i);
        }
    }
    fout << k << '\n';
    for (int i=1; i<=k; ++i) {
        fout << sol[i] << ' ';
    }
    return 0;
}