Cod sursa(job #3255802)

Utilizator Barbu_MateiBarbu Matei Barbu_Matei Data 12 noiembrie 2024 15:14:01
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <bits/stdc++.h>
using namespace std;

int n, v[100001];
int l, d[100001];
int pred[100001];

bool comp(int a, int b) {
    return v[a] < b;
}

int main() {
    ifstream cin("scmax.in");
    ofstream cout("scmax.out");
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        cin >> v[i];
    }
    d[++l] = 1;
    for (int i = 2; i <= n; ++i) {
        if (v[i] > v[d[l]]) {
            pred[i] = d[l];
            d[++l] = i;
        } else if (v[i] < v[d[l]]) {
            int pos = lower_bound(d + 1, d + l + 1, v[i], comp) - d;
            d[pos] = i;
            pred[i] = d[pos - 1];
        }
    }
    int pos = d[l];
    stack<int> s;
    while (pos != 0) {
        s.push(v[pos]);
        pos = pred[pos];
    }
    cout << s.size() << "\n";
    while (!s.empty()) {
        cout << s.top() << " ";
        s.pop();
    }
}