Cod sursa(job #2144566)

Utilizator rebecca0312Andrei Rebecca rebecca0312 Data 26 februarie 2018 20:12:45
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;

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

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

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