Cod sursa(job #49997)

Utilizator flo_demonBunau Florin flo_demon Data 6 aprilie 2007 18:30:09
Problema Subsir 2 Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>

using namespace std;

#define NMAX 30001

int n;
int A[NMAX];
int V[NMAX], L;  // sirul care pastreaza CMLSC si L dimensiunea lui
void Read();
void CLSC();  // O(n * log n)
void Write();

int main()
{
    Read();
    CLSC();
    Write();

    return 0;
}

void Read()
{
    ifstream fin("subsir2.in");
    fin >> n;
    for ( int i = 0; i < n; i++ )
        fin >> A[i];
    fin.close();
}

void CLSC()
{
    int i, l, r, m;
    V[0] = 0;
    L = 1;
    for (i = 1; i < n; i++)
    {
        if (A[i] > A[ V[L-1] ]) V[L++] = i;
        else
        {
            l = 0, r = L-1;
            while (l < r)
            {
                m = (l + r) >> 1;
                if (A[i] < A[ V[m] ]) r = m;
                else             l = m + 1;
            }
            if ( A[ V[l-1] ] != A[i] ) V[l] = i;
        }
    }
}

void Write()
{
    ofstream fout("subsir2.out");

    fout << L << "\n";
    for (int i = 0; i < L; i++)
        fout << V[i]+1 << " ";
}