Cod sursa(job #3266087)

Utilizator Ayan__bAyan Bozesan Ayan__b Data 5 ianuarie 2025 17:16:51
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;
#define dim 100005
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;
}