Cod sursa(job #1470641)

Utilizator CalinCojoFMI Cojocaru Calin George CalinCojo Data 11 august 2015 19:18:23
Problema Subsir crescator maximal Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("scmax.in",ios::in);
ofstream g("scmax.out",ios::out);


void findMaxAscSubarr(int v[],int maxLenght[],int n)
{
    maxLenght[0] = 1;

    for (int i = 1 ; i < n ; i++)
    {
        maxLenght[i] = (v[i]>v[i-1]) ? maxLenght[i-1] + 1 : maxLenght[i-1];
    }
}

void showMaxAscSubarr ( int v[] , int maxLenght[],int n)
{
    int solContor = 1;
    int MAX = maxLenght[n-1];
    int sol[MAX+1];
    sol[0] = v[0];
    sol[MAX] = maxLenght[n-1];

    for (int i = 0 ; i < n ; i++)
    {
        if ( maxLenght[i] == 1)
        {
            if(v[i] < sol[1])   sol[1] = v[i];
        }
        else if ( maxLenght[i] == MAX)
        {
            if(v[i]>sol[MAX])   sol[MAX] = v[i];
        }
        else
        {
            if (maxLenght[i] != solContor)
            {
                sol[++solContor] = v[i];
            }
            else
            {
                if (v[i] < sol[solContor] && v[i] > sol[solContor-1])
                    sol[solContor] = v[i];
            }
        }
    }
    g<<MAX<<"\n";
    for (int i = 1; i <= MAX ; i++)
        g<<sol[i]<<" ";

}


int main()
{
    int n;
    f>>n;
    int v[n],maxLenght[n];
    for (int i = 0 ;i < n; i++)
        f>>v[i];

    findMaxAscSubarr(v,maxLenght,n);

    showMaxAscSubarr(v,maxLenght,n);
    return 0;
}