Gem nu ai că ești sărac, dar îți place să gătești. Ești mega chef. Ai pretenții și gătești doar cu cuțite de aur. Asta nu este doar povestea ta, este povestea a chefi numerotați de la la (sortați după cât de în sânge fac ei carnea). Pentru fiecare astfel de chef se cunosc intervale, cheful fiind reprezentat de intervalele , respectiv . Aceste intervale sunt reprezentate pe axa culinară cu valori de la la , unde fiecare element reprezintă un tip de mâncare (sau un dish cum spun englezii). Pentru fiecare chef , se știe că el poate să pregătească orice dish din intervalul , dar în eventualitatea în care participă la un concurs internațional culinar (foarte puțin probabil), acesta dorește să pregătească pentru concurs dish-urile din intervalul (și știi cum e în viață, ce poți nu e mereu ce vrei).
Și pac urmează o competiție internațională culinară (cine se aștepta?) numită Șiaorma Fest, că dacă nu urma, nu o menționam. Chefii au început să facă echipe, iar bârfele sunt pe val. Există criterii mari și late pentru ca un subset de chefi să poată să facă echipă:
-
Aceștia să reprezinte un interval compact de indici. De exemplu, cheful cu indicele poate să facă echipă cu cheful cu indicele doar dacă se bagă în echipă și chefii și . Nu de alta, dar cheful care face carnea mai în sânge nu face echipa cu orice demodat cu indicele care face carnea mai "uel dan", decât dacă sunt în echipă și toți ceilalți chefi intermediari să medieze conflictul și să nu se certe până se termină timpul.
-
În plus, un interval de chefi pot face echipă dacă pentru fiecare chef din echipă și pentru fiecare dish din intervalul , există cel puțin un chef din echipă ( poate să fie egal cu ) care poate să gătească dish-ul .
Cerință
Se dau interogări, fiecare interogare constând în doi indici și . Pentru fiecare interogare, se cere să se determine dacă subsecvența de chefi pot să facă echipă sau nu.
În funcție de cât de skillat te simți, poți alege să răspunzi la aceste query-uri offline (cerința ) sau online (cerința ) și vei primi puncte pe măsură.
Detalii de implementare
Va trebui să implementezi mai multe funcții. Prima dintre ele este:
int precompute(int N, int Q, std::vector<int> A, std::vector<int> B, std::vector<int> C, std::vector<int> D)
care primește ca parametri:
- , numărul total de chefi
- , numărul de interogări
- și , vectori cu semnificația din enunț
Funcția precompute trebuie să proceseze datele primite și apoi să returneze o valoare din mulțimea în funcție de cerința pe care alegeți să o rezolvați. În continuare, va trebui să implementați câte o funcție pentru fiecare cerință, numite cerinta_1 și cerinta_2.
std::vector<bool> cerinta_1(std::vector<std::pair<int, int>> queries)
care:
- primește ca parametru
queries, un vector indexat de la care conține cele interogări; - returnează un vector de lungime în care pe poziția se va afla răspunsul la a -a interogare pentru .
bool cerinta_2(std::pair<int, int> query)
care:
- primește ca parametru
query, o pereche reprezentând o singură interogare; - returnează
truedacă răspunsul la interogare este pozitiv șifalsealtfel.
Pentru un test în care funcția precompute a returnat valoarea:
- funcția
cerinta_1va fi apelată o singură dată; - funcția
cerinta_2va fi apelată de ori.
Observați că dacă întotdeauna optați pentru aceeași cerință, atunci nu este obligatoriu să implementați o soluție valida pentru ambele cazuri, dar tot va trebui să includeți o definiție a funcției. Vedeți modelul din sample-solution.cpp.
Restricții și precizări
- .
- .
- .
- .
- .
- Pentru rezolvarea cerinței se acordă din punctajul testului.
| # | Punctaj | Restricții |
|---|---|---|
| 1 | 4 | |
| 2 | 7 | și |
| 3 | 13 | și |
| 4 | 11 | |
| 5 | 14 | și |
| 6 | 17 | |
| 7 | 34 | Fără restricții suplimentare. |
Exemplul 1
input
10 3
1 3 1 2 1 1 1 1 2 1
3 3 3 2 2 1 2 2 3 3
1 1 2 1 1 1 2 1 2 1
1 3 2 2 1 3 2 1 2 2
2 4
5 7
7 9
output
query 0: 1
query 1: 0
query 2: 1
Explicație
Chefii din subsecvența pot să pregătească împreună dish-urile , prin urmare ei pot fi parte din aceeași echipă.
Chefii din subsecvența nu pot să pregătească împreună dish-urile , care nu acoperă complet intervalul