Cod sursa(job #2373574)

Utilizator Vlad3108Tir Vlad Ioan Vlad3108 Data 7 martie 2019 14:18:02
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <bits/stdc++.h>
using namespace std;
#define LMAX 100005
int v[LMAX];
int len,poz[LMAX],T[LMAX];
int B_Search(int i){
    int st=1,dr=len;
    while(st<=dr){
        int mij=(st+dr)/2;
        if(v[poz[mij]]<v[i])
            st=mij+1;
        else dr=mij-1;
    }
    len=max(len,st);
    return st;
}
void write(int poz){
    if(poz==0)
        return ;
    write(T[poz]);
    printf("%d ",v[poz]);
}
int main(){
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
        scanf("%d",&v[i]);
    poz[len=1]=1;
    for(int i=2;i<=n;++i){
        int ind=B_Search(i);
        T[i]=poz[ind-1];
        poz[ind]=i;
    }
    printf("%d\n",len);
    write(poz[len]);
    return 0;
}