Cod sursa(job #1010683)

Utilizator impulseBagu Alexandru impulse Data 15 octombrie 2013 13:46:09
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <stdio.h>
#define MAX(a,b) (a > b ? a : b)
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] = 1;
        C[i] = -1;
    }

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

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