Cod sursa(job #2182076)

Utilizator NaritaandreiCNAINarita Andrei NaritaandreiCNAI Data 22 martie 2018 09:06:57
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <stdio.h>
using namespace std;
FILE *f,*g;
int nr,n;
int q[100002],p[100002],v[100002];
int cautare_binara(int x)
{
    int st=1, dr=nr,mij,poz;
    if(x>q[nr])
    {
        nr++;
        return nr;
    }
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(q[mij]==x)
            return 0;
        if(q[mij]>x)
            poz=mij, dr=mij-1;
        else
            st=mij+1;
    }
    return poz;
}
void afisare(int x, int i)
{
    while(p[i]!=x)
        i--;
    if(x>=1 && i>=1)
    {
        afisare(x-1, i-1);
        fprintf(g,"%d ",v[i]);
    }

}
int main()
{   int i,x,y;
    f=fopen("scmax.in","r");
    g=fopen("scmax.out","w");
    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++)
    {
        fscanf(f,"%d",&v[i]);
        x=cautare_binara(v[i]);
        q[x]=v[i];
        p[i]=x;
    }
    fprintf(g,"%d\n",nr);
    afisare(nr, n);


    fclose(f);
    fclose(g);
    return 0;
}