# PBinfo #2026 – PlatouK – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Cerința
Fiind dat un şir de numere, denumim secvenţă a acestuia o parte dintre termenii şirului luaţi de pe poziţii consecutive. Denumim platou al acestui şir o secvenţă formată din valori identice. Lungimea unui platou este egală cu numărul de elemente care îl formează.

De exemplu, în şirul de numere 1 1 1 7 7 3 4 4 4 7 7 avem: 


platourile 1 1 1 şi 4 4 4  ambele având lungimea 3;
platourile 7 7  (cel care începe în poziţia a patra) şi 7 7 (cel care începe pe poziţia a zecea), ambele având lungimea 2;
platoul 3 care are lungimea 1.

În schimb nu avem platoul 7 7 7 7 deoarece cele patru elemente egale cu 7 nu sunt pe poziţii consecutive!

Se dă un şir de n numere. Asupra acestui şir se pot efectua o singură dată următoarele două operaţiuni în această ordine: 


se extrage un platou la alegere;
se inserează platoul extras la pasul anterior într-o poziţie la alegere din şirul rezultat după extragere.

De exemplu, dacă avem următorul şir inițial: 2 2 5 0 5 8 8 8 4 9 9 9 0 0 2 2 8 extragem platoul 2 2 format din elementele aflate în penultima şi antepenultima poziţie şi obţinem şirul: 2 2 5 0 5 8 8 8 4 9 9 9 0 0 8

În şirul rezultat inserăm platoul 2 2 (pe care l-am extras în pasul anterior) în poziţia a doua şi obţinem şirul: 2 2 2 2 5 0 5 8 8 8 4 9 9 9 0 0 8

Să se scrie un program care pentru un şir dat determina: 
1: lungimea maximă a unui platou care poate să apară în şir în urma efectuării celor două operaţiuni de maxim k ori 
2: elementul din care este format platoul

Date de intrare
Programul va citi:


pe prima linie un număr natural k;
pe a doua linie un număr natual n;
pe a treia linie un şir de n numere naturale separate prin câte un spaţiu, reprezentând elementele şirului dat. Fiecare dintre aceste numere aparţine intervalului [0,10000].
pe a patra linie p, care reprezinta cerinta

Date de ieșire
Programul va afisa lungimea maximă a unui platou care poate să apară în şir în urma efectuării celor două operaţiuni de maxim k ori sau elementul din care este format platoul.

Restricții și precizări

1 ≤ n ≤ 1000000
1 ≤ k ≤ 100
numerele aparțin intervalului [0,10000].
pentru cerinta 1 – 50% din punctaj
pentru cerinta 2 – 50% din punctaj
daca sunt mai multe numere care au platou de lungime maxima se va afisa cel mai mare
toate testele au solutie

Exemplul 1
intrare

2
16 
2 2 5 0 5 8 8 8 4 9 9 9 0 8 2 2
1 
iesire

4
Exemplul 2
intrare

2
16 
2 2 5 0 5 8 8 8 4 9 9 9 0 8 2 2
2
iesire

8
Explicație
În urma executării celor două operațiuni pot să apară platouri de lungime maximă 4 în două moduri: 2 2 2 2 respectiv 8 8 8 8.

## Cod sursă C++

```cpp
/// Solutie - Moca Andrei - 100p
#include <iostream>
#include <algorithm>
using namespace std;
int a[10002][102], n, x, c = 1, y, s, smax, k, l[10002], nr, cerinta;
bool cmp(int a1, int a2)
{
    if (a1 > a2)
        return 1;
    return 0;
}
int main()
{
    cin >> k >> n >> x;
    int imin = x, imax = x;
    for (int i = 2; i <= n; i++)
    {
        cin >> y;
        imin = min(imin, y);
        imax = max(imax, y);
        if (x == y)
            c++;
        if (x != y || i == n)
        {
            l[x]++;
            a[x][l[x]] = c;
            sort (a[x] + 1, a[x] + l[x] + 1, cmp);
            if (l[x] > k)
                a[x][l[x]] = 0, l[x] = k;
            c = 1;
        }
        x = y;
    }
    cin >> cerinta;
    for (int i = imin; i <= imax; i++)
    {
        for (int j = 1; j <= k; j++)
            s += a[i][j];
        if (s > smax)
            smax = s, nr = i;
        else
            if (s == smax)
                nr = i;
        s = 0;
    }
    if (cerinta == 1)
        cout << smax;
    else
        if (cerinta == 2)
            cout << nr;
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/2026)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/2026/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-2026/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
