Cod sursa(job #2001221)

Utilizator Vlad3108Tir Vlad Ioan Vlad3108 Data 16 iulie 2017 00:13:46
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <bits/stdc++.h>
#define LMAX 100005
using namespace std;
int n,len=1,v[LMAX],Max[LMAX],T[LMAX];
inline int bSearch(int i){
    int st=1,dr=len;
    while(st<=dr){
        int mij=(st+dr)>>1;
        if(v[Max[mij]]>=v[i]) dr=mij-1;
        else st=mij+1;
    }
    len=max(st,len);
    return st;
}
inline void Afis(int i){
    if(T[i]) Afis(T[i]);
    printf("%d ",v[i]);
}
int main(){
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
        scanf("%d",&v[i]);
    for(int i=1;i<=n+1;++i)
        Max[i]=INT_MAX;
    Max[1]=1;
    for(int i=2;i<=n;++i){
        int poz=bSearch(i);
        T[i]=Max[poz-1];
        Max[poz]=i;
    }
    printf("%d\n",len);
    Afis(Max[len]);
}