Cod sursa(job #1335651)

Utilizator PescaruVictorPescaru Victor PescaruVictor Data 5 februarie 2015 19:48:58
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <cstdio>
#define NMAX 100009
using namespace std;


FILE * fin=fopen("scmax.in", "r");
FILE * fout=fopen ("scmax.out", "w");


struct vec
{
    int val, poz;
};

int n;
int lg;
int sol[NMAX];
vec a[NMAX];

void rez ();
int cautbinar(int st, int dr, int el);

int main()
{
    rez();
    return 0;
}

int cautbinar(int st, int dr, int el)
{
    int mij;
    while(st<dr)
    {
        mij=(st+dr)/2;
        if(el==sol[mij])
            return mij;
        else if(el>sol[mij])
            st=mij+1;
        else dr=mij+1;
    }
    return st;
}

void rez ()
{
    int i, aux;
    fscanf(fin, "%d\n", &n);
    for(i=1; i<=n; ++i)
    {
        fscanf(fin, "%d ", &a[i].val);
        if(a[i].val>sol[lg])
        {
            ++lg;
            sol[lg]=a[i].val;
            a[i].poz=lg;
        }
        else
        {
            aux=cautbinar(1, lg, a[i].val);
            sol[aux]=a[i].val;
            a[i].poz=aux;
        }

    }
    aux=lg;
    fprintf(fout, "%d\n", lg);
    for(i=n; aux; --i)
        if(a[i].poz==aux)
        {
            sol[aux]=a[i].val;
            --aux;
            //fprintf(fout, "%d ", a[i].val);
        }
    for(i=1; i<=lg; ++i)
        fprintf(fout, "%d ", sol[i]);

}