Cod sursa(job #2488597)

Utilizator razvanmihailaMihaila Razvan razvanmihaila Data 7 noiembrie 2019 10:20:30
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.85 kb
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int prim(int n)
{
    if(n == 0 || n == 1)
        return 0;
    if(n == 2)
        return 1;
    if(n % 2 == 0)
        return 0;
    else
        for(int d = 3; d * d <= n; d += 2)
            if(n % d == 0)
                return 0;
    return 1;
}

struct mama{
    int capat;
    int nrelemsecventa;
    int elem[1001];
}a[1001];
bool comp(mama a, mama b)
{
    if(a.nrelemsecventa > b.nrelemsecventa)
        return true;
    else
        return false;
}
int v[1001], b[1001], i, j, st, n, dr, mid, rez, k, cnt;
int main()
{
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);

    int max = -1;
    cin >> n;
    for(i = 1; i <= n; i ++)
    {
        cin >> b[i];
        if(prim(b[i]) == 1)
        {
            k ++;
            v[k] = b[i];
        }
    }
    for(i = n; i >= 2; i --)
    {
        cnt = 1;
        a[i].capat = v[i];
        a[i].elem[1] = v[i];
        for(int j = i - 1; j >= 1; j --)
        {
            st = 1;
            dr = j;
            rez = -1;
            while(st <= dr)
            {
                mid = (st + dr) / 2;
                if(v[mid] > a[i].capat)
                    dr = mid - 1;
                else
                {
                    rez = mid;
                    st = mid + 1;
                }
            }
            if(rez != -1)
            {
                cnt ++;
                a[i].elem[cnt] = v[rez];
                a[i].capat = v[rez];
            }
        }
        a[i].nrelemsecventa = cnt;
        if(max < cnt)
            max = cnt;
    }
    sort(a + 1, a + k + 1, comp);
    cout << max - 1;
    cout << endl;
    for(j = a[1].nrelemsecventa; j >= 1; j --)
        cout << a[1].elem[j] << " ";
    return 0;
}