Cod sursa(job #2180960)

Utilizator dobrandreiAndrei Dobra dobrandrei Data 21 martie 2018 12:30:34
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <stdio.h>

using namespace std;
FILE *f,*g;
int v[100002],p[100002],q[100002];
int lgq,lgp,n;
int Search(int x)
{
    if(x>q[lgq])
    {
        ++lgq;
        return lgq;
    }
    int st=1,dr=lgq,mij,poz=lgq;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(q[mij]>x)
            poz=mij,dr=mij-1;
        else
            st=mij+1;
    }
    return poz;
}
void read()
{
    fscanf(f,"%d",&n);
    for(int i=1;i<=n;++i)
    {
        fscanf(f,"%d",&v[i]);
        int poz=Search(v[i]);
        q[poz]=v[i];
        p[++lgp]=poz;
    }
}
void afis(int dr,int x)
{
    for(int i=dr;i>=1;i--)
        if(p[i]==x)
        {
            afis(i,x-1);
            fprintf(g,"%d ",v[i]);
            break;
        }
}
int main()
{
    f=fopen("sclmax.in","r");
    g=fopen("sclmax.out","w");
    read();
    fprintf(g,"%d\n",lgq);
    afis(lgp+1,lgq);
    return 0;
}