Cod sursa(job #1010666)

Utilizator impulseBagu Alexandru impulse Data 15 octombrie 2013 13:24:49
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <stdio.h>

int main()
{
    FILE* fr = fopen("scmax.in", "r");
    FILE* fw = fopen("scmax.out", "w");

    int n;
    fscanf(fr, "%d", &n);
    int *A = new int[n];
    for(int i = 0; i < n; i++)
        fscanf(fr, "%d", A + i);

    int *B = new int[n],
        *C = new int[n];
    for(int i = 0; i < n; i++)
    {
        B[i] = 0;
        C[i] = 0;
    }

    B[n-1] = 1;
    C[n-1] = -1;

    int mA = -1, mB = 0;
    for(int i = n-2; i >= 0; i--)
    {
        if(A[i] < A[i+1])
        {
            B[i] = B[i+1] + 1;
            C[i] = i+1;
            if(mA < B[i])
            {
                mA = B[i];
                mB = i;
            }
        }
        else if (A[i] == A[i+1])
        {
            B[i] = B[i+1];
            C[i] = C[i+1];
        }
    }

    fprintf(fw, "%d\n", mA);
    for(int i = mB; i != -1; i = C[i])
        fprintf(fw, "%d ", A[i]);
    return 0;
}