# PBinfo #959 – secmax – Rezolvare C++

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

## Enunț

Fie  \( X = \overline{X_1 X_2 X_3…X_N} \)  un număr natural din N cifre. 

	Definim secvență în numărul X orice număr format dintr-un grup de cifre situate pe poziții consecutive în X. De exemplu, pentru X=12543644 pot fi secvențe numerele: 5436, 12, 1, 364, 12543644, etc.  

	Definim secvență-maxim în șirul \(X\) o secvență \( \overline{X_K X_{K+1}…X_P…X_T} \)  în care există o singură cifră \( X_P \) astfel încât  \( X_K < X_{K+1} <…< X_P > X_{P+1} >…> X_T \)  ( \(1≤K<P<T≤N\)  și \(K,P,T\) sunt numere naturale). De exemplu, pentru X=12543644 secvențele-maxim sunt: 1254, 12543, 254, 2543, 364.  

Cerință
Scrieți un program care citește numărul N, cele N cifre ale numărului X și care determină numărul total de secvenţe-maxim din numărul X.

Date de intrare
Fișierul de intrare secmax.in conține pe prima linie numărul natural N. Pe următoarea linie se află o succesiune de N cifre  X1X2...XN, reprezentând cifrele numărului X.

Date de ieșire
Fișierul de ieșire secmax.out va conține pe prima linie un număr natural, reprezentând numărul total de secvenţe-maxim din numărul X.

Restricții și precizări

8 ≤ N ≤ 25000
0 ≤ X1, X2 , ..., XN ≤ 9
X1 ≠ 0
o   secvență-maxim este formată din cel puțin trei cifre

Exemplu:
secmax.in

8
12543644
secmax.out

5
Explicație
Cifrele numărului X sunt: 1, 2, 5, 4, 3, 6, 4, 4. 
Numărul conține 5 secvențe-maxim.  Acestea sunt: 1254, 12543, 254, 2543, 364.

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
ifstream in("secmax.in");
ofstream out("secmax.out");
int main() {
	char X[25100];
	int n, st[25100], dr[25100];
	in >> n;
	st[1] = 1, dr[n] = 1;
	for (int i = 1; i <= n; ++i)
		in >> X[i];
	int rez = 0;
	for (int i = 2; i <= n; ++i) {
		if (X[i - 1] < X[i])
			st[i] = st[i - 1] + 1;
		else st[i] = 1;
	} for (int i = n - 1; i >= 1; --i) {
		if (X[i] > X[i + 1])
			dr[i] = dr[i + 1] + 1;
		else dr[i] = 1;
	} for (int i = 1; i <= n; ++i)
		rez = rez + (st[i] - 1) * (dr[i] - 1);
	out << rez;
	return 0;
}
```

## Resurse

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