Cod sursa(job #2306808)

Utilizator SemetgTemes George Semetg Data 22 decembrie 2018 22:19:38
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define FILE_NAME "scmax"
#define N_MAX 100005
using namespace std;

ifstream in ( FILE_NAME".in" );
ofstream out ( FILE_NAME".out" );

int N;
int a[N_MAX], t[N_MAX];
vector<int> dp;

void print(int c) {
    if (c) {
        print(t[c]);
        out << a[c] << ' ';
    }
}

int main() {
    in >> N;
    for (int i = 1; i <= N; ++i)
        in >> a[i];
    
    dp.push_back(1);
    for (int i = 2; i <= N; ++i) {
        int poz = int(upper_bound(dp.begin(), dp.end(), i, [](int j, int k) {
            return a[j] <= a[k];
        }) - dp.begin());
        
        if (poz == int(dp.size()))
            dp.push_back(i);
        else
            dp[poz] = i;
        
        t[i] = dp[poz - 1];
    }
    
    out << dp.size() << '\n';
    print(dp[dp.size() - 1]);
}