Cod sursa(job #3201635)

Utilizator Toni07Stoica Victor Toni07 Data 9 februarie 2024 11:48:38
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int Vmax = 1e6+3;
int a[Vmax], minVal[Vmax], pre[Vmax], dp[Vmax], sol;
void reconst(int last){
    if(pre[last])
        reconst(pre[last]);
    fout << a[last] << " ";
}
int main(){
    int n;
    fin >> n;
    for(int i=1;i<=n;i++)
        fin >> a[i];
    for(int i=1;i<=n;i++){
        if(minVal[sol]<a[i]){
            sol++;
            minVal[sol]=a[i], dp[sol]=i;
            if(sol) pre[i]=dp[sol-1];
        }
        else {
            int poz = lower_bound(minVal+1, minVal+sol+1, a[i]) - minVal;
            minVal[poz]=a[i], dp[poz]=i;
            if(poz)
                pre[i]=dp[poz-1];
        }
    }
    fout << sol << "\n";
    reconst(dp[sol]);
    return 0;
}