Cod sursa(job #2712425)

Utilizator Uriesu_IuliusUriesu Iulius Uriesu_Iulius Data 25 februarie 2021 19:13:23
Problema Subsir crescator maximal Scor 55
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;

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

int n;
int v[100001], dp[100001], ans[100001];
int k;

void Citire()
{
    int i;
    fin >> n;
    for(i=1; i<=n; i++)
        fin>>v[i];
}

int binarySearch(int st, int dr, int x)
{
    int poz=dr+1;
    while(st<=dr)
    {
        int m=(st+dr)/2;
        if(dp[m]>x)
        {
            poz=m;
            dr=m-1;
        }
        else
            st=m+1;
    }
    return poz;
}

void Construire()
{
    int i;
    for(i=1; i<=n; i++)
        if(v[i]>dp[k])
            dp[++k]=v[i];
        else
            dp[binarySearch(1, k, v[i])]=v[i];
}

void Afisare()
{
    int i;
    fout << k << "\n";
    for(i=1; i<=k; i++)
        fout << dp[i] << " ";
}

int main()
{
    Citire();
    Construire();
    Afisare();
    return 0;
}