Cod sursa(job #815175)

Utilizator brainwashed20Alexandru Gherghe brainwashed20 Data 16 noiembrie 2012 18:03:36
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include<fstream>

using namespace std;

#define Nmax 100001

int V[Nmax], D[Nmax], poz[Nmax], N, maxlenght, maxpoz;
char *buff, bufflenght;

int get_number(int &k) {

    int nr = 0;

    while(!(buff[k] >= '0' && buff[k]<='9') && k<bufflenght)
        ++k;

    while(buff[k]>='0' && buff[k]<='9' && k<bufflenght) {
        nr = nr*10 + buff[k]-'0';
        ++k;
    }

    return nr;
}

int main() {

    ifstream f;
    f.open("scmax.in");
    f.seekg(0, ios::end);
    bufflenght = f.tellg();
    buff = new char[bufflenght];
    f.seekg(0, ios::beg);
    f.read(buff, bufflenght);
    f.close();

    int i, j, k;

    k = 0;
    N = get_number(k);
    for(i=1; i<=N; ++i) {
        V[i] = get_number(k);
        poz[i] = -1;
        D[i] = 1;
    }

    maxlenght = 1;
    maxpoz = N;

    for(i=N-1; i>=1; --i)
        for(j=i+1; j<=N; ++j)
            if(V[i] < V[j] && D[i] < D[j] + 1) {
                D[i] = D[j] + 1;
                poz[i] = j;
                if(D[i] > maxlenght) {
                    maxlenght = D[i];
                    maxpoz = i;
                }
            }


    ofstream g("scmax.out");
    g<<maxlenght<<"\n";
    for(i=maxpoz; i!=-1; i=poz[i])
        g<<V[i]<<" ";
    g.close();

    return 0;
}