Cod sursa(job #2337704)

Utilizator bodea.georgianaBodea Georgiana bodea.georgiana Data 6 februarie 2019 17:28:29
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <cstdio>
#define N 100002
#include <iostream>

using namespace std;
FILE *f,*g;

int x[N],pred[N],v[N],lg;

void write(int poz)
{
    if(pred[poz])
    {
        write(pred[poz]);
    }
      fprintf(g,"%d ",x[poz]);
}
int cb(int i)
{
    if(lg==0 || x[v[lg]]<x[i])
        v[++lg]=i,pred[i]=v[lg-1];
    else
    {
        int st,dr,mij,poz=1;
        st=1,dr=lg;
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(x[v[mij]]<x[i])
                poz=st=mij+1;
            else
                dr=mij-1;
        }
        v[poz]=i;
        pred[i]=v[poz-1];
    }

}

int main()
{
    f=fopen("scmax.in","r");
    g=fopen("scmax.out","w");
    int n;
    fscanf(f,"%d",&n);
    for(int i=1;i<=n;++i)
    {
        fscanf(f,"%d",&x[i]);
        cb(i);
    }
    fprintf(g,"%d\n",lg);
    write(v[lg]);
    fclose(f);
    fclose(g);
    return 0;
}