Cod sursa(job #3346282)

Utilizator bandyAndrei Raileanu Szeles bandy Data 13 martie 2026 09:44:15
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

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

int t[100005];
vector<int> v;
vector<int> pos;
vector<int> sol;
int maxl=0,n;

int cb(int x)
{
    int st=0, dr=v.size()-1, poz=0;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(v[mij]>=x)
            poz=mij, dr=mij-1;
        else
            st=mij+1;
    }
    return poz;
}

int main() {
    in >> n;
    for (int i=1;i<=n;i++) {
        in >> t[i];
    }
    for (int i = 1; i <= n; i++) {
        int x=t[i];
        if (v.empty() || x>v[v.size()-1]) {
            v.push_back(x);
            pos.push_back(v.size()-1);
        }
        else {
            int k=cb(x);
            v[k]=x;
            pos.push_back(k);
        }
    }
    int k=v.size();
    out<<k<<'\n';
    for (int i=n;i>0;i--) {
        if (pos[i-1]+1==k) {
            sol.insert(sol.begin(),t[i]);
            k--;
        }
    }
    for (int i:sol) {
        out<<i<<' ';
    }
    return 0;
}