Cod sursa(job #2337678)

Utilizator bodea.georgianaBodea Georgiana bodea.georgiana Data 6 februarie 2019 16:56:26
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <cstdio>
#include <iostream>
#define N 100002

using namespace std;
FILE *f,*g;

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

void write(int poz)
{
    if(pred[poz])
    {
        write(pred[poz]);
        fprintf(g,"%d ",v[poz]);
    }
    else
        fprintf(g,"%d ",v[poz]);
}
int caut_binar(int x)
{
    int st,dr,mij,poz;
    if(lg==0 || v[lg]<x)
        return ++lg;

    st=1,dr=lg,poz=0;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[mij]<x)
            poz=mij,st=mij+1;
        else
            dr=mij-1;
    }
    return poz+1;
}
int main()
{
    f=fopen("scmax.in","r");
    g=fopen("scmax.out","w");
    int n,x,where;
    fscanf(f,"%d",&n);
    for(int i=1;i<=n;++i)
    {
        fscanf(f,"%d",&x);
        where=caut_binar(x);
        v[where]=x;
        pred[where]=where-1;
    }
    fprintf(g,"%d\n",lg);
    write(lg);
    fclose(f);
    fclose(g);
    return 0;
}