Cod sursa(job #2369752)

Utilizator mariastStoichitescu Maria mariast Data 6 martie 2019 09:06:42
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include<fstream>
using namespace std;

ifstream f ("scmax.in");
ofstream g ("scmax.out");
int n,st,dr,nr,poz,l[100003],sir[100003],p[100003],a[100003],m,maxim;
void afisare(int x){
    if(p[x]!=0) afisare(p[x]);
    g<<a[x]<<" ";
}
int main()
{
    f>>n;
    l[1]=1;
    sir[1]=1;
    nr=1;
    l[0]=0;
    f>>a[1];
    for(int i=2;i<=n;++i){
        f>>a[i];
        st=0;dr=nr;
        poz=0;
        bool ok=1;
        while(st<=dr){
            m=(st+dr)/2;
            if(a[l[m]]<a[i]&&a[l[m+1]]>=a[i]){poz=m;ok=0;break;}
            else if(a[l[m+1]]<a[i]) st=m+1;
            else dr=m-1;
        }
        if(ok) poz=nr;
        p[i]=l[poz];
        sir[i]=poz+1;
        l[poz+1]=i;
        if(nr<poz+1) nr=poz+1;
    }
    maxim=0;
    poz=0;
    for(int i=1;i<=n;++i){
        if(maxim<sir[i]){
            maxim=sir[i];
            poz=i;
        }
    }
    g<<maxim<<'\n';
    afisare(poz);
}