Cod sursa(job #3208026)

Utilizator antonio_sefu_tauLaslau Antonio antonio_sefu_tau Data 27 februarie 2024 14:37:17
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>
using namespace std;
const int dim=1e5+5;
int n,a[dim],len,dp[dim],poz[dim],pozf[dim];
int main(){
    ifstream f("scmax.in");
    ofstream g("scmax.out");
    f>>n;
    for(int i=1;i<=n;i++){
        f>>a[i];
    }
    for(int i=1;i<=n;i++){
        if(a[i]>dp[len]){
            dp[++len]=a[i];
            poz[i]=len;
        }
        else{
            int st=1,dr=len,p=-1;
            while(st<=dr){
                int mid=(st+dr)/2;
                if(dp[mid]>=a[i]){
                    dr=mid-1;
                    p=mid;
                }
                else{
                    st=mid+1;
                }
            }
            if(p!=-1){
                dp[p]=a[i];
                poz[i]=p;
            }
        }
    }
    g<<len<<'\n';
    int j=n;
    for(int i=len;i>=1;i--){
        while(poz[j]!=i){
            j--;
        }
        pozf[i]=j;
    }
    for(int i=1;i<=len;i++){
        g<<a[pozf[i]]<<' ';;
    }
    return 0;
}