Cod sursa(job #2300357)

Utilizator alexc2k00Ciornei Alexandru alexc2k00 Data 11 decembrie 2018 11:08:27
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");
const int N = 100001;
int n, Lis[N], v[N];

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

int cautare(int s, int d, int valoare) {
	int m;
    while(s <= d) {
        m = (s+d)/2;
        if(v[Lis[m]] < valoare) s = m+1;
        else d = m-1;
    }
    return s;
}

void parc() {
    int pozitie;
    int Lmax = 0;

    for(int i=1; i<=n; i++) {
        pozitie = cautare(1, Lmax, v[i]);
        Lmax = max(Lmax, pozitie);
        Lis[pozitie] = i;
    }
    g << Lmax << "\n";
    for(int i=1; i<=Lmax; i++)
        g << v[Lis[i]] << " ";
}

int main() {
	citire();
	parc();
}