Cod sursa(job #2777492)

Utilizator IoanMihaiIoan Mihai IoanMihai Data 23 septembrie 2021 15:41:44
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, a[100005];
int cautare(int v[], int st, int dr, int x)
{
    int mij;
    while(st < dr){
        mij = (st + dr) / 2;
        if (v[mij] <= x){
            st = mij + 1;
        }else{
            dr = mij - 1;
        }
    }
    return st;
}
void Scmax(int N, int v[])
{
    int tail[N];
    int len = 1;
    tail[0] = v[0];
    for (int i=1;i<N;i++){
        if (v[i] < tail[0]){
            tail[0] = v[i];
        }else if (v[i] > tail[len - 1]){
            tail[len ++] = v[i];
        }else{
            tail[cautare(tail, -1, len - 1, v[i])] = v[i];
        }
    }

    fout << len << '\n';
    for (int i=0;i<len;i++){
        fout << tail[i] << ' ';
    }

}
int main() {
    fin >> n;
    for (int i=0;i<n;i++){
        fin >> a[i];
    }

    Scmax(n, a);
    return 0;
}