# PBinfo #4053 – foarfeca – Rezolvare C++

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

## Enunț

Cerința
Se dă o un șir \(p\) de \(n\) numere distincte din mulțimea \({1, 2, \dots, n}\). Separați șirul într-un număr minim de subsecvențe astfel încât după o reordonare a acestora se poate obține șirul \([1, 2, \dots, n]\).

Date de intrare
Se citește numărul \(n\), iar apoi \(n\) numere naturale, separate prin spații.

Date de ieșire
Se afișează \(n\) numere naturale între \(1\) și \(n\). Al \(i\)-lea număr reprezintă subsecvența din care face parte elementul \(p_i\). Subsecvențele trebuie numerotate cu numere consecutive începând de la \(1\), în ordine de la stânga la dreapta.

Restricții și precizări

\(1 \le n \le 10^5\)

Exemplu:
Intrare

6
6 3 4 5 1 2
Ieșire

1 2 2 2 3 3
Explicație
Șirul se separă în subsecvențele \([6 ]\), \([3,4,5]\) și \([1,2]\). Această se reordonează în următorul mod: \([1, 2]\), \([3,4,5]\), \([6 ]\).

## Cod sursă C++

```cpp
/**
 ____ ____ ____ ____ ____
||a |||t |||o |||d |||o ||
||__|||__|||__|||__|||__||
|/__\|/__\|/__\|/__\|/__\|
**/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N_MAX = (int) 1e5;
int n;
int p[N_MAX + 2];
int main () {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> p[i];
    }
    int curr = 1;
    for (int i = 1; i <= n; i++) {
        curr += (i > 1 && p[i] != p[i - 1] + 1);
        cout << curr << " ";
    }
    cout << "\n";
    return 0;
}
```

## Resurse

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