Cod sursa(job #2246784)

Utilizator EmplopiStefan Nitu Emplopi Data 27 septembrie 2018 16:01:10
Problema Subsir crescator maximal Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int v[100001], pozmin[100001], pred[100001];

int cautbin(int nr, int n){
    int poz=0, pas=1<<16;
    while(pas>0){
        if(v[pozmin[poz+pas]]<nr && poz+pas<=n)
            poz+=pas;
        pas/=2;
    }

    return poz;
}

void afisare(FILE *fout, int i){
    if(pred[i]!=0)
        afisare(fout, pred[i]);
    fprintf(fout, "%d ", v[i]);
}

int main(){
    FILE *fin, *fout;
    int n, i, j, m;
    fin=fopen("scmax.in", "r");
    fout=fopen("scmax.out", "w");
    fscanf(fin, "%d", &n);
    for(i=1;i<=n;i++)
        fscanf(fin, "%d", &v[i]);
    m=0;
    for(i=1;i<=n;i++){
        j=cautbin(v[i], m);
        pred[i]=pozmin[j];
        pozmin[j+1]=i;
        if(j==m)
            m++;
    }
    fprintf(fout, "%d\n", m);
    //afisare(fout, pozmin[m]);
    fclose(fin);
    fclose(fout);

    return 0;
}