inversiuni

Time limit: 1.5s Memory limit: 128MB Input: Output:

Cerință

Fie un șir de caractere SS, format din litere mici ale alfabetului englez, indexat de la 11. Trebuie să răspundeți la QQ query-uri de forma x,yx, y - calculați câte inversiuni se află în intervalul [x,y][x, y]. O inversiune este o pereche de indici (i,j)(i, j), 1i<jN1 \leq i < j \leq N , pentru care este adevărată relația Si>SjS_i > S_j.

Date de intrare

Pe prima linie din intrare se află un număr natural NN reprezentând dimensiunea șirului. Pe a doua linie se află șirul de caractere SS. Pe a treia linie se află QQ, reprezentând numărul de query-uri, iar pe următoarele QQ linii se află câte două numere naturale, separate printr-un spațiu, care reprezintă un query.

Date de ieșire

Se vor afişa, pe linii diferite, QQ numere naturale reprezentând răspunsurile pentru fiecare query.

Restricții și precizări

  • 1N200 0001 \leq N \leq 200 \ 000;
  • 1Q400 0001 \leq Q \leq 400 \ 000.
  • Subtask 11 (1010p): N100N \leq 100;
  • Subtask 22 (2020p): N1 000N \leq 1 \ 000;
  • Subtask 33 (4040p): N10 000N \leq 10 \ 000;
  • Subtask 44 (3030p): Fără alte restricții.

Exemplul 1

stdin

7
yjiknyy
6
5 7
1 5
2 6
1 6
6 7
1 5

stdout

0
5
1
5
0
5

Exemplul 2

stdin

10
dvoeikwnuw
10
1 7
5 7
1 2
3 8
4 6
1 6
2 7
3 3
2 3
6 9

stdout

7
0
0
5
0
7
7
0
1
2

Log in or sign up to be able to send submissions!