Se dă un șir de numere naturale , toate având valori între și .
Asupra acestui șir se pot executa oricâte operații (posibil ) de tipul (), unde . În urma unei operații (), toată subsecvența (subșir continuu) se înlocuiește în întregul șir doar cu elementul median inferior al acesteia.
Elementul median inferior al unui șir de numere este elementul de pe poziția (indexând șirul de la ) după ce se sortează șirul (de exemplu, elementul median inferior al șirului este , iar elementul median inferior al șirului este ).
Pentru un șir obținut prin aplicarea operației descrise (de sau mai multe ori) și un număr , notăm lungimea maximă a unei subsecvențe din șirul în care toate numerele au valoarea cu . De asemenea, având funcția , se notează cu valoarea maximă a acestei funcții pentru o valoare dată, considerând toate șirurile ce pot fi obținute prin aplicarea (posibil repetată sau deloc) a operației descrise anterior.
Cerință
Pe lângă șirul de numere deja dat, se dau și interogări , unde , pentru orice de la la . Pentru fiecare interogare se cere să se afle , considerând doar subsecvența 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 ori și primește ca parametri:
- : lungimea șirului inițial;
- : numărul de interogări;
- : cele valori ale șirului inițial (indexate de la );
- și : reprezentând capetele celor interogări, indexate de la , interogarea cu numărul fiind reprezentată de perechea ;
și trebuie să returneze un șir cu pentru fiecare dintre cele interogări, în ordinea în care acestea sunt date.
Restricții
- , pentru
- , pentru
- Se notează cu numărul de valori distincte din șirul ()
- Se notează cu suma tuturor valorilor lui din cele teste, cu suma tuturor valorilor lui din cele teste și cu suma tuturor produselor din cele teste.
| # | Punctaj | Restricții |
|---|---|---|
| 1 | 4 | , |
| 2 | 5 | |
| 3 | 13 | |
| 4 | 17 | |
| 5 | 47 | |
| 6 | 13 | |
| 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: . Să analizăm cazul pentru , unde vrem să obținem o subsecvență continuă cât mai lungă formată doar din valoarea . Putem alege să aplicăm o operație pe elementele (adică valorile ). După sortarea acestei subsecvențe (), elementul median este . Înlocuind subsecvența cu mediana ei, șirul devine . Ne oprim aici, pentru că am obținut o subsecvență în care se află toate aparițiile inițiale ale lui . Nu este nevoie ca întregul șir să fie transformat în valori de , ci este suficient că am obținut o subsecvență continuă de lungime formată exclusiv din această valoare. Deci, . Valorile și nu pot forma subsecvențe mai mari de lungime , deci , , . Valoarea nu există deloc (). Suma pentru prima interogare este: .
- Pentru a doua interogare, ne restrângem la primele elemente: . Aici nicio valoare nu se repetă și nu putem obține prin nicio operație subsecvențe mai lungi de . Astfel, , , , iar pentru restul valorilor ( și ) răspunsul este . Suma pentru a doua interogare este: .
Pentru al doilea exemplu, în mod similar, răspunsul la prima interogare este , iar la a doua este .