Cod sursa(job #2486063)

Utilizator Dorin07Cuibus Dorin Iosif Dorin07 Data 2 noiembrie 2019 11:45:20
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>
#define N 100001
using namespace std;

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

int n, maxi, v[N], poz[N], a[N], sol[N];

int CautareBinara(int val){
    int st = 1, dr = maxi;
    while(st <= dr)
        {   int mij = (st + dr) / 2;
            if(v[poz[mij]] < val) st = mij + 1;
            else dr = mij - 1;
        }
    return st;
}

int main()
{
    fin >> n;
    for(int i=1; i<=n; i++){
        fin >> v[i];
    }
    a[1] = poz[1] = maxi = 1;
    for(int i=2; i<=n; i++){
        if(v[i] > v[poz[maxi]]){
            poz[++maxi] = i, a[i] = maxi;
        } else {
            int p = CautareBinara(v[i]);
            a[i] = p;
            poz[p] = i;
        }
    }
    fout << maxi << '\n';
    int maxi1 = maxi;
    for(int i=n; i>=1; i--){
        if(a[i] == maxi)
            sol[maxi] = v[i], maxi--;
    }
    for(int i=1; i<=maxi1; i++){
        fout << sol[i] <<" ";
    }
    fout << '\n';
    return 0;
}