GemNuAi

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

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 NN chefi numerotați de la 00 la N1N-1 (sortați după cât de în sânge fac ei carnea). Pentru fiecare astfel de chef se cunosc 22 intervale, cheful ii fiind reprezentat de intervalele [Ai,Bi][A_i, B_i], respectiv [Ci,Di][C_i, D_i]. Aceste intervale sunt reprezentate pe axa culinară cu valori de la 11 la NN, unde fiecare element reprezintă un tip de mâncare (sau un dish cum spun englezii). Pentru fiecare chef ii, se știe că el poate să pregătească orice dish din intervalul [Ai,Bi][A_i, B_i], 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 [Ci,Di][C_i, D_i] (ș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ă 22 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 33 poate să facă echipă cu cheful cu indicele 66 doar dacă se bagă în echipă și chefii 44 și 55. Nu de alta, dar cheful 33 care face carnea mai în sânge nu face echipa cu orice demodat cu indicele 66 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 [x,y][x,y] pot face echipă dacă pentru fiecare chef ii din echipă și pentru fiecare dish jj din intervalul [Ci,Di][C_i, D_i], există cel puțin un chef kk din echipă (kk poate să fie egal cu ii) care poate să gătească dish-ul jj.

Cerință

Se dau QQ interogări, fiecare interogare constând în doi indici xx și yy. Pentru fiecare interogare, se cere să se determine dacă subsecvența [x,y][x, y] 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 11) sau online (cerința 22) ș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:

  • NN, numărul total de chefi
  • QQ, numărul de interogări
  • A,B,CA, B, C și DD, vectori cu semnificația din enunț

Funcția precompute trebuie să proceseze datele primite și apoi să returneze o valoare din mulțimea {1,2}\{1, 2\} î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 QQ interogări;
  • returnează un vector de lungime QQ în care pe poziția ii se va afla răspunsul la a ii-a interogare pentru 0i<N0 \leq i < N.
bool cerinta_2(std::pair<int, int> query)

care:

  • primește ca parametru query, o pereche reprezentând o singură interogare;
  • returnează true dacă răspunsul la interogare este pozitiv și false altfel.

Pentru un test în care funcția precompute a returnat valoarea:

  • 1 1 \ - funcția cerinta_1 va fi apelată o singură dată;
  • 2 2 \ - funcția cerinta_2 va fi apelată de QQ 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

  • 1N500 0001 \leq N \leq 500 \ 000.
  • 1Q5 000 0001 \leq Q \leq 5 \ 000 \ 000.
  • 1AiBiN1 \leq A_i \leq B_i \leq N.
  • 1CiDiN1 \leq C_i \leq D_i \leq N.
  • 0LiRi<N0 \leq L_i \leq R_i < N.
  • Pentru rezolvarea cerinței 11 se acordă 70%70\% din punctajul testului.
# Punctaj Restricții
1 4 1N,Q10 0001 \leq N, Q \leq 10 \ 000
2 7 Ai=Bi,Ci=Di, 0i<NA_i = B_i, C_i = D_i, \forall \ 0 \le i < N și N,Q200 000N, Q \leq 200 \ 000
3 13 LiLi+1,RiRi+1, 0i<N1L_i \leq L_{i+ 1}, R_i \leq R_{i + 1}, \forall \ 0 \le i < N - 1 și N,Q200 000N, Q \leq 200 \ 000
4 11 N,Q200 000N, Q \leq 200 \ 000
5 14 Ai=BiA_i = B_i și N,Q200 000, 0i<NN, Q \leq 200 \ 000, \forall \ 0 \le i < N
6 17 N100 000N \leq 100 \ 000
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 [2,4][2, 4] pot să pregătească împreună dish-urile {1,2,3}\{1, 2, 3\}, prin urmare ei pot fi parte din aceeași echipă.

Chefii din subsecvența [5,7][5, 7] nu pot să pregătească împreună dish-urile {1,2}\{1, 2\}, care nu acoperă complet intervalul [C5,D5][C_5, D_5]

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