Cod sursa(job #1985047)

Utilizator Constantin.Dragancea Constantin Constantin. Data 26 mai 2017 18:46:24
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <bits/stdc++.h>
using namespace std;

int n,A[100010],p[100010],poz,M[100010],k;

void afisare(int q){
    if (p[q]) afisare(p[q]);
    cout<<A[q]<<" ";
}

int main(){
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    cin>>n;
    for (int i=1; i<=n; i++) cin>>A[i];
    M[0]=0; k=0;
    for (int i=1; i<=n; i++){
        int mid,st=1,dr=k;
        while (st<=dr){
            mid=(st+dr)/2;
            if (A[i]>A[M[mid]]) st=mid+1;
            else dr=mid-1;
        }
        p[i]=M[st-1];
        M[st]=i;
        if (st>=k) k=st,poz=i;
    }
    cout<<k<<"\n";
    afisare(poz);
    return 0;
}