Cod sursa(job #2280047)

Utilizator SweetHumanAvram Gheorghe SweetHuman Data 10 noiembrie 2018 11:08:09
Problema Subsir crescator maximal Scor 95
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f1("scmax.in");
ofstream f2("scmax.out");
long long v[100005],e[100005];
int n,p[100005],elimit,maxindice;
long long afis[100005];

int cautbin(long long vec[], int vecmin, int vecmax, long long element){
    if(element<=vec[vecmax] && element>vec[vecmax-1])
        return vecmax;
    if(element>vec[vecmax])
        return vecmax+1;
    int dist=(vecmax-vecmin)/2;
    if(element>vec[vecmin+dist])
        return cautbin(vec, vecmin+dist, vecmax, element);
    else
        return cautbin(vec, vecmin, vecmin+dist-1, element);
}

int main() {
    f1>>n;
    for(int i=0;i<n;i++){
        f1>>v[i];
    }
    elimit=1;
    e[0]=v[0];
    p[0]=1;
    for(int i=1;i<n;i++){
        int poz=cautbin(e,0,elimit-1,v[i]);
        e[poz]=v[i];
        if(poz>elimit-1)
            elimit=poz+1;
        p[i]=poz+1;
        if(p[i]>maxindice)
            maxindice=p[i];
    }
    f2<<maxindice<<endl;
    int maxpos=n;
    for(int i=maxindice;i>0;i--){
        for(int j=maxpos;j>0;j--){
            if(p[j]==i){
                maxpos=j;
                break;
            }
        }
        afis[i]=v[maxpos];
    }
    for(int i=1;i<=maxindice;i++){
        f2<<afis[i]<<" ";
    }
    return 0;
}