Cod sursa(job #3154486)

Utilizator antonio_sefu_tauLaslau Antonio antonio_sefu_tau Data 4 octombrie 2023 20:28:02
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
using namespace std;
const int dim=1e5+5;
int n,a[dim],dp[dim],len,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 left=1,right=len,sol=-1;
            while(left<=right){
                int mid=(left+right)/2;
                if(dp[mid]>=a[i]){
                    sol=mid;
                    right=mid-1;
                }
                else{
                    left=mid+1;
                }
            }
            if(sol!=-1){
                dp[sol]=a[i];
                poz[i]=sol;
            }
        }
    }
    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;
}