Mediana

Time limit: 7s Memory limit: 512MB Input: Output:

Se dă un șir de NN numere naturale a0,a1,...,aN1a_0, a_1, ..., a_{N - 1}, toate având valori între 11 și NN.

Asupra acestui șir se pot executa oricâte operații (posibil 00) de tipul (l,rl, r), unde 0lr<N0 \leq l \leq r < N. În urma unei operații (l,rl, r), toată subsecvența (subșir continuu) al,al+1,...,ara_l, a_{l + 1}, ..., a_r se înlocuiește în întregul șir doar cu elementul median inferior1^1 al acesteia.

1^1 Elementul median inferior al unui șir de MM numere v0,v1,...,vM1v_0, v_1, ..., v_{M - 1} este elementul de pe poziția M12\lfloor \frac{M - 1}{2} \rfloor (indexând șirul de la 00) după ce se sortează șirul (de exemplu, elementul median inferior al șirului 4,1,3,24, 1, 3, 2 este 22, iar elementul median inferior al șirului 2,7,5,10,12, 7, 5, 10, 1 este 55).

Pentru un șir VV obținut prin aplicarea operației descrise (de 00 sau mai multe ori) și un număr XX, notăm lungimea maximă a unei subsecvențe din șirul VV în care toate numerele au valoarea XX cu f(V,X)f(V, X). De asemenea, având funcția f(V,X)f(V, X), se notează cu answerXanswer_X valoarea maximă a acestei funcții pentru o valoare XX dată, considerând toate șirurile VV ce pot fi obținute prin aplicarea (posibil repetată sau deloc) a operației descrise anterior.

Cerință

Pe lângă șirul aa de NN numere deja dat, se dau și QQ interogări li,ril_i, r_i, unde 0liri<N0 \leq l_i \leq r_i < N, pentru orice ii de la 00 la Q1Q - 1. Pentru fiecare interogare se cere să se afle X=1NanswerXX\sum_{X=1}^{N} answer_X \cdot X, considerând doar subsecvența ali,ali+1,...,aria_{l_i}, a_{l_i + 1}, ..., a_{r_i} din șirul dat drept șir pe care se aplică operațiile.

Detalii de implementare

Veți avea de implementat o singură funcție:

std::vector<int64_t> solve(int N, int Q, std::vector<int> a, 
                            std::vector<int> l, std::vector<int> r)

Funcția solve va fi apelată de către comisie de cel mult TT ori și primește ca parametri:

  • NN: lungimea șirului inițial;
  • QQ: numărul de interogări;
  • aa: cele NN valori ale șirului inițial (indexate de la 00);
  • ll și rr: reprezentând capetele celor QQ interogări, indexate de la 00, interogarea cu numărul ii fiind reprezentată de perechea li,ril_i, r_i;

și trebuie să returneze un șir cu X=1NanswerXX\sum_{X=1}^{N} answer_X \cdot X pentru fiecare dintre cele QQ interogări, în ordinea în care acestea sunt date.

Restricții

  • 1T,N,Q100 0001 \leq T, N, Q \leq 100 \ 000
  • 1aiN1 \leq a_i \leq N, pentru 0i<N0 \leq i < N
  • 0liri<N0 \leq l_i \leq r_i < N, pentru 0i<Q0 \leq i < Q
  • Se notează cu MM numărul de valori distincte din șirul aa (1MN1 \leq M \leq N)
  • Se notează cu SNS_N suma tuturor valorilor lui NN din cele TT teste, cu SQS_Q suma tuturor valorilor lui QQ din cele TT teste și cu SNQS_{NQ} suma tuturor produselor NQN \cdot Q din cele TT teste.
  • 1SN,SQ100 0001 \leq S_N, S_Q \leq 100 \ 000
# Punctaj Restricții
1 4 M=2M = 2, SNQ2106S_{NQ} \leq 2 \cdot 10^6
2 5 N,M,Q10N, M, Q \leq 10
3 13 SN,SQ50S_N, S_Q \leq 50
4 17 SN200,SQ500S_N \leq 200, S_Q \leq 500
5 47 SNQ2106S_{NQ} \leq 2 \cdot 10^6
6 13 SNQ2107S_{NQ} \leq 2 \cdot 10^7
7 1 Fără restricții suplimentare.

Exemple

input

2
5
2 1 4 2 5
2
0 4
0 2
5
1 2 2 1 1
2
1 4
0 4

output

14
7
6
7

Explicații

În primul exemplu:

  • Pentru prima interogare, aplicăm operațiile pe întregul șir: 2,1,4,2,52, 1, 4, 2, 5. Să analizăm cazul pentru X=2X = 2, unde vrem să obținem o subsecvență continuă cât mai lungă formată doar din valoarea 22. Putem alege să aplicăm o operație pe elementele a1,a2,a3a_1, a_2, a_3 (adică valorile 1,4,21, 4, 2). După sortarea acestei subsecvențe (1,2,41, 2, 4), elementul median este 22. Înlocuind subsecvența cu mediana ei, șirul devine 2,2,52, 2, 5. Ne oprim aici, pentru că am obținut o subsecvență în care se află toate aparițiile inițiale ale lui 22. Nu este nevoie ca întregul șir să fie transformat în valori de 22, ci este suficient că am obținut o subsecvență continuă de lungime 22 formată exclusiv din această valoare. Deci, answer2=2answer_2 = 2. Valorile 1,41, 4 și 55 nu pot forma subsecvențe mai mari de lungime 11, deci answer1=1answer_1 = 1, answer4=1answer_4 = 1, answer5=1answer_5 = 1. Valoarea 33 nu există deloc (answer3=0answer_3 = 0). Suma pentru prima interogare este: 11+22+03+14+15=141 \cdot 1 + 2 \cdot 2 + 0 \cdot 3 + 1 \cdot 4 + 1 \cdot 5 = 14.
  • Pentru a doua interogare, ne restrângem la primele 33 elemente: 2,1,42, 1, 4. Aici nicio valoare nu se repetă și nu putem obține prin nicio operație subsecvențe mai lungi de 11. Astfel, answer1=1answer_1 = 1, answer2=1answer_2 = 1, answer4=1answer_4 = 1, iar pentru restul valorilor (33 și 55) răspunsul este 00. Suma pentru a doua interogare este: 11+12+03+14+05=71 \cdot 1 + 1 \cdot 2 + 0 \cdot 3 + 1 \cdot 4 + 0 \cdot 5 = 7.

Pentru al doilea exemplu, în mod similar, răspunsul la prima interogare este 66, iar la a doua este 77.

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