Universal Cup Judging System

Universal Cup

시간 제한: 4.0 s 메모리 제한: 1024 MB 총점: 100 난이도: [표시] 해킹 가능 ✓
통계

Multi-Heads Cup, w skrócie MHC, to światowy konkurs programistyczny stworzony dla uczestników mających wiele, wiele głów. W 2023 roku sędzia główny tego wydarzenia, Little Cyan Fish, rozwiązał trudny problem uwierzytelniania za pomocą wielu rodzajów nawiasów.

To był pierwszy raz, kiedy Little Cyan Fish zobaczył zawodników mających wiele, wiele głów. Tym razem Little Cyan Fish przynosi kolejne zadanie nawiasowe swojemu najlepszemu przyjacielowi, który ma wiele, wiele głów. Little Cyan Fish ma w ręku $n$ rodzajów nawiasów, a każdy rodzaj dzieli się na nawiasy otwierające i nawiasy zamykające. Dla wygody używamy $L^i$ do oznaczenia nawiasu otwierającego $i$-tego rodzaju oraz $R^i$ do oznaczenia nawiasu zamykającego $i$-tego rodzaju.

„Hej, nie zapomnij” — pomyślał Little Cyan Fish — „Już wcześniej wyjaśniłem ci, czym jest poprawny ciąg nawiasowy!”. Aby upewnić się, że rozumiesz pojęcie poprawnego ciągu nawiasowego, Little Cyan Fish przygotował następującą formalną definicję poprawnego ciągu nawiasowego:

  • $\varepsilon$ (pusty napis) jest poprawnym ciągiem nawiasowym.
  • Jeśli $A$ jest poprawnym ciągiem nawiasowym, to $(A)$ również jest poprawnym ciągiem nawiasowym.
  • Jeśli $A$ i $B$ są poprawnymi ciągami nawiasowymi, to $AB$ również jest poprawnym ciągiem nawiasowym.

Na przykład „()”, „()()” i „(())” są poprawnymi ciągami nawiasowymi, ale „)(”, „(” i „))” nie są.

problem_18006_c94506411d8fcb12ebc396edd1eb34bd.png

Teraz Little Cyan Fish daje ci ciąg nawiasowy $S$ o długości $n$, zawierający $n$ rodzajów nawiasów. Niestety Little Cyan Fish zapomniał rodzajów nawiasów na niektórych pozycjach, a także zapomniał kierunków nawiasów na tych pozycjach. Wspomnienie tych pozycji stało się rozmyte i zostało oznaczone przez Little Cyan Fish znakiem ?.

Little Cyan Fish jest bardzo ciekawy, dla wszystkich $1 \le l \le r \le n$, ile par $(l, r)$ odpowiada podciągom spójnym $S[l \dots r]$ takim, że istnieje sposób wypełnienia znaków ? pewnym rodzajem nawiasu w pewnym kierunku tak, aby dla każdego $1 \le i \le n$ zachodziło:

  • Po wyodrębnieniu wszystkich nawiasów rodzaju $i$ (tj. wszystkich $L^i$ oraz $R^i$), otrzymany ciąg nawiasowy (zawierający wyłącznie nawiasy $i$-tego rodzaju) jest poprawnym ciągiem nawiasowym.

Na przykład, jeśli użyjemy „()” do oznaczenia pierwszego rodzaju nawiasów i „[]” do oznaczenia drugiego rodzaju nawiasów, to napis nawiasowy ([?) spełnia powyższy warunek, ponieważ możemy zastąpić ? znakiem ]. Napis (?)] również spełnia powyższy warunek, ponieważ możemy zastąpić ? znakiem [.

Little Cyan Fish chce, abyś obliczył liczbę wszystkich poprawnych par $(l, r)$.

Wejście

Wejście składa się z wielu przypadków testowych. Pierwszy wiersz wejścia zawiera jedną liczbę całkowitą $T$ ($1 \le T$), oznaczającą liczbę przypadków testowych.

Dla każdego przypadku testowego pierwszy wiersz wejścia zawiera liczbę całkowitą $n$ ($1 \le n \le 2 \times 10^5$), oznaczającą długość napisu nawiasowego.

Kolejny wiersz zawiera $n$ liczb całkowitych $x_1, x_2, \dots, x_n$ ($-n \le x_i \le n$). Te $n$ liczb całkowitych opisuje informacje o napisie nawiasowym, gdzie:

  • Jeśli $x_i > 0$, to $i$-ta pozycja reprezentuje nawias otwierający rodzaju $x_i$ (tj. $L^{x_i}$).
  • Jeśli $x_i < 0$, to $i$-ta pozycja reprezentuje nawias zamykający rodzaju $-x_i$ (tj. $R^{-x_i}$).
  • Jeśli $x_i = 0$, oznacza to, że Little Cyan Fish zapomniał informacji na tej pozycji (tj. ?).

Gwarantuje się, że suma $n$ po wszystkich przypadkach testowych nie przekracza $2 \times 10^5$.

Wyjście

Dla każdego przypadku testowego wypisz jeden wiersz zawierający jedną liczbę całkowitą, oznaczającą odpowiedź.

Przykład

Wejście 1

4
4
1 2 -1 -2
4
1 0 -2 0
6
1 2 3 -3 -2 -1
8
1 0 0 3 0 0 0 -2

Wyjście 1

1
3
3
14

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.