Cod sursa(job #1657435)

Utilizator gabor.vlad13lil pump gabor.vlad13 Data 20 martie 2016 14:56:59
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#define NMAX 100005

using namespace std;

int vec[NMAX];
int a[NMAX];
int n;
int maxim;
bool done = false;

void afiseaza(int k)
{
    printf("%d\n", k);
    for (int i=1; i<=k; i++)
    {
        printf("%d ", a[vec[i]]);
    }

}

bool crescator(int k)
{
    if (k == 1)
        return true;
    int nr = 0;
    for (int i=1; i<k; i++)
    {
        if (a[vec[i]] < a[vec[i+1]])
            nr++;
    }

    if (nr == k-1)
        return true;
    return false;
}

void bt(int k=1)
{

    for (int i=vec[k-1]+1; i<=n; i++)
    {
            vec[k] = i;
            if (crescator(k))
            {
                if (k > maxim)
                    maxim = k;
            }
            bt(k+1);
    }
}

void bt2(int k = 1)
{
    if (crescator(k) && k == maxim)
    {
        afiseaza(k);
        done = true;
        return;
    }

    for (int i=vec[k-1]+1; i<=n && !done; i++)
    {
            vec[k] = i;
            bt2(k+1);
    }
}

void Solve()
{
    bt();
    memset(vec, 0, sizeof(vec));
    bt2();
}
void Read()
{
    scanf("%d\n", &n);
    for(int i=1; i<=n; i++)
    {
        scanf("%d ", &a[i]);
    }
}
int main()
{
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    Read();
    Solve();
    return 0;
}