ConcursC++17

snake

Considerăm un șir de KK numere naturale nenule V=(V1,V2,V3,…,VK)V = (V_1, V_2, V_3, \dots, V_K), unde ViV_i reprezintă valoarea elementului din șir aflat pe poziția ii (1≤i≤K1 \le i \le K).

Vom nota cu compress(V)compress(V) șirul obținut prin înlocuirea tuturor elementelor cu valori egale aflate pe poziții consecutive în șir cu un singur element având acea valoare. De exemplu, dacă V=(1,1,2,2,2,4,3,3,1,1)V = (1, 1, 2, 2, 2, 4, 3, 3, 1, 1), atunci compress(V)compress(V) va fi șirul (1,2,4,3,1)(1, 2, 4, 3, 1).

Spunem că o poziție dintr-un șir este maxim local dacă valoarea de la acea poziție este strict mai mare decât elementele aflate pe pozițiile vecine. Spunem că o poziție dintr-un șir este minim local dacă valoarea de la acea poziție este strict mai mică decât elementele aflate pe pozițiile vecine. Pozițiile de la capetele unui șir cu cel puțin două elemente au un singur vecin. Într-un șir cu un singur element, poziția acestui element este atât minim local, cât și maxim local. De exemplu, pentru șirul V=(1,2,4,3,1)V = (1, 2, 4, 3, 1) avem pozițiile 11 și 55 ca minime locale, respectiv poziția 33 ca maxim local, iar pentru V=(9)V = (9) poziția 11 este atât minim, cât și maxim local.

Se dă șirul AA de NN numere naturale nenule A=(A1,A2,A3,…,AN)A = (A_1, A_2, A_3, \dots, A_N). Numim secvență snake a șirului AA o secvență S=(AL,AL+1,AL+2,…AR)S = (A_L, A_{L+1}, A_{L+2}, \dots A_R) cu 1≤L<R≤N1 \le L < R \le N cu proprietatea că fiecare poziție din șirul compress(S)compress(S) este minim local sau maxim local. De exemplu, pentru șirul A=(1,1,5,5,2,2,4,4,5,5)A = (1, 1, 5, 5, 2, 2, 4, 4, 5, 5), secvența de la poziția L=1L = 1 până la poziția R=8R = 8 este snake, deoarece compress(S)=(1,5,2,4)compress(S) = (1, 5, 2, 4).

Cerință

Să se determine câte perechi de poziții (L,R)(L, R) cu 1≤L<R≤N1 \le L < R \le N au proprietatea că secvența S=(AL,AL+1,AL+2,…AR)S = (A_L, A_{L+1}, A_{L+2}, \dots A_R) este snake.

Date de intrare

Fișierul de intrare snake.in conține două linii. Prima linie conține numărul NN. A doua linie conține cele NN elemente ale șirului AA, separate prin câte un spațiu.

Date de ieșire

Fișierul de ieșire snake.out va conține un singur număr, reprezentând răspunsul la cerință.

Restricții și precizări

  • 1≤N≤200 0001 \le N \le 200\ 000
  • 1≤Ai≤1091 \le A_i \le 10^9, 1≤i≤N1 \le i \le N
#PunctajRestricții
1121≤N≤3001 \le N \le 300, 1≤Ai≤201 \le A_i \le 20
223300<N≤4 000300 < N \le 4 \ 000
3244 000<N≤200 0004 \ 000 < N \le 200\ 000, Ai≠Ai+1A_i \ne A_{i+1}, 1≤i≤N−11 \le i \le N - 1
441Fără restricții suplimentare

Exemplul 1

snake.in

6
1 2 4 4 3 3

snake.out

11

Explicație

Perechile (L,R)(L, R) care au proprietatea cerută sunt:
(1,2)(1, 2), (2,3)(2, 3), (2,4)(2, 4), (2,5)(2, 5), (2,6)(2, 6), (3,4)(3, 4), (3,5)(3, 5), (3,6)(3, 6), (4,5)(4, 5), (4,6)(4, 6), (5,6)(5, 6).
În total sunt 1111 astfel de perechi.

Exemplul 2

snake.in

7
1 2 4 4 4 5 5

snake.out

14

Explicație

Perechile (L,R)(L, R) care au proprietatea cerută sunt: (1,2)(1, 2), (2,3)(2, 3), (2,4)(2, 4), (2,5)(2, 5), (3,4)(3, 4), (3,5)(3, 5), (3,6)(3, 6), (3,7)(3, 7), (4,5)(4, 5), (4,6)(4, 6), (4,7)(4, 7), (5,6)(5, 6), (5,7)(5, 7), (6,7)(6, 7).
În total sunt 1414 astfel de perechi.

Exemplul 3

snake.in

10
1 1 5 5 2 2 4 4 5 5

snake.out

33

Explicație

Sunt 3333 de perechi (L,R)(L, R) cu proprietatea cerută.

Sursă și autori

ONI 2026, clasele 6. Andrei Boacă.

Enunț din Kilonova, sub licența CC-BY-NC-SA-4.0, conform politicii sursei. Adaptări de prezentare și tipografie. Exemplele, formulele și figurile originale sunt păstrate.

RÂNDUL TĂU

Trimite o soluție

Editor de cod

Setul original de teste și regulile de punctare sunt în curs de verificare. Trimiterea pentru evaluare va fi disponibilă după această verificare.

Se verifică autentificarea…

Un pas, apoi următorul.Înapoi sus ↑