Cod sursa(job #2573578)

Utilizator rebecca0312Andrei Rebecca rebecca0312 Data 5 martie 2020 18:13:14
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include<bits/stdc++.h>
using namespace std;

const int NMAX=100005;
vector<int> best[NMAX];

int bs(int st, int dr, int val){
    while(st<dr-1){
        int mij=(st+dr)/2;
        if(best[mij][mij]<val)
            st=mij;
        else
            dr=mij;
    }
    return st;
}

int main(){
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    int n,nr;
    scanf("%d%d", &n, &nr);
    for(int i=0;i<=n;i++)
        best[i].push_back(0);
    best[1].push_back(nr);
    int cnt=1;
    for(int i=2;i<=n;i++){
        scanf("%d", &nr);
        int poz=bs(0, cnt+1, nr);
        best[poz+1]=best[poz];
        best[poz+1].push_back(nr);
        if(poz==cnt)
            cnt++;
    }
    printf("%d\n", cnt);
    for(int i=1;i<=cnt;i++)
        printf("%d ", best[cnt][i]);
    return 0;
}