# PBinfo #3356 – alfa – Rezolvare C++

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

## Enunț

Cerința
Se dă un șir format din n numere naturale. Se mai dă o valoare x și se garantează că șirul începe și se termină cu valoarea x. Transformați șirul astfel: 

Elementele cu valoarea x rămân pe pozițiile lor;
Secvențele de elemente diferile de x aflate între două poziții cu valoarea x se ordonează crescător (între aceleași două elemente cu valoarea x se vor afla aceleași elemente ca la început dar în ordine crescătoare).


Date de intrare
Fișierul alfa.in conține pe prima linie un număr natural n reprezentând dimensiunea șirului și un număr x cu semnificația de mai sus. Pe linia a doua n numere naturale, separate prin câte un spațiu, reprezentând elementele șirului.

Date de ieșire
Fișierul alfa.out conține cele n elemente ale șirului în ordinea cerută.

Restricții și precizări

2 <= n <= 1000
Elementele șirului dat sunt naturale nenule formate din maximum 4 cifre
Pentru 40 de puncte șirul conține doar două elemente cu valoarea x (primul și ultimul).

Exemplu:
alfa.in

10 3
3 4 1 2 3 7 9 8 3 3
alfa.out

3 1 2 4 3 7 8 9 3 3

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
int v[1001];
int n, x, p, i, j, aux, last;
int main () {
    ifstream fin ("alfa.in");
    ofstream fout("alfa.out");
    fin>>n>>x;
    for (i=1;i<=n;i++)
        fin>>v[i];
    last = n;
    for (p=n-1;p>=1;p--)
        if (v[p] == x) {
            int sortat;
            do {
                sortat = 1;
                for (i=p+1;i<=last-2;i++)
                    if (v[i] > v[i+1]) {
                        aux = v[i];
                        v[i] = v[i+1];
                        v[i+1] = aux;
                        sortat = 0;
                    }
            } while (sortat == 0);
            last = p;
        }
    for (i=1;i<=n;i++)
        fout<<v[i]<<" ";
    return 0;
}
```

## Resurse

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