Cod sursa(job #2233177)

Utilizator al3xionescuIonescu Alexandru al3xionescu Data 22 august 2018 14:37:16
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>
#define nmax 100005
using namespace std;
fstream f1("scmax.in", ios::in);
fstream f2("scmax.in", ios::out);
int n,a[nmax],s[nmax],l,lung[nmax],nrsol,sol[nmax];
int cauta(int st, int dr, int val){
    if(st<=dr){
        int mijl= (st+dr)/2;
        if(s[mijl]<val) return cauta(mijl+1,dr,val);
        else return cauta(st,mijl-1,val);
    }
    else return st;
}
int main()
{
    int i,poz;
    f1>>n;
    for(i=1;i<=n;i++){
        f1>>a[i];
        poz=cauta(1,l,a[i]);
        s[poz]=a[i];
        lung[i]=poz;
        if(poz>l) l=poz;
    }
    f2<<l<<"\n";
    for(i=n;(i>=1)&&(l>0);i--){
        if(lung[i]==l){
            nrsol++;
            sol[nrsol]=a[i];
            l--;
        }
    }
    for(i=nrsol;i>=1;i--){
        f2<<sol[i]<<' ';
    }
    return 0;
}