Chițooc

Time limit: 5.5s Memory limit: 512MB Input: chitooc.in Output: chitooc.out

Ești antrenorul echipei ZOMVS și te afli în satul Chițooc la finala turneului de fotbal. Este minutul 90' și echipa ta are avantaj, când deodată niște vaci invadează terenul!

Terenul este împărțit în NN zone de lungime egală, iar numărul de vaci din fiecare zonă este cunoscut (zonele terenului pot fi reprezentate ca un vector de NN elemente).

Fiindcă ai prevăzut situația aceasta, fiecare dintre jucătorii echipei tale are un lasou cu care poate face următoarea mișcare cel mult o singură dată:

  • Dacă jucătorul ii se află pe poziția posipos_i, el poate să adune toate vacile dintr-o zonă jj în zona posipos_i, cu condiția ca j<posij < pos_i.
  • Totuși, această mișcare consumă energia jucătorului respectiv. Dacă coeficientul energiei jucătorului este coeficoef_i, mișcarea va consuma coefi(posij){coef_i} \cdot (pos_i - j) unități de energie.

Cerință

Fiindcă tu ești antrenorul lor, primești QQ întrebări de la jucători. Pentru fiecare întrebare primești două valori ll, rr și te întreabă care este numărul maxim de vaci care pot fi strânse într-o zonă și care este energia totală minimă necesară pentru a atinge acest număr folosind doar zone din intervalul [l,r][l, r].

Generarea datelor

Pentru a evita citirea unui volum foarte mare de date, doar primele MM întrebări vor fi citite din fișierul de intrare (unde M10 000M \leq 10 \ 000). Restul întrebărilor, de la M+1M+1 până la QQ, se vor genera în programul vostru folosind următorul algoritm:

pentru i ← M + 1, Q execută
	l[i] ← ((l[i-1] ^ (a * l[i-M])) mod N) + 1
	r[i] ← ((r[i-1] ^ (b * r[i-M])) mod N) + 1
	dacă l[i] > r[i] atunci
		interschimbă l[i] cu r[i]
	sfârșit dacă
sfârșit pentru

Notă: Operația logică pe biți „XOR / SAU exclusiv” este reprezentată de simbolul ^ și se efectuează în C/C++ prin operatorul ^. Calculele intermediare din algoritmul de generare a datelor pot depăși capacitatea de reprezentare a tipurilor întregi pe 32 de biți (de exemplu int sau unsigned int). Se recomandă utilizarea tipurilor de date pe 64 de biți (de exemplu long long) unde este cazul.

Date de intrare

Pe prima linie a fișierului de intrare chitooc.in se dă NN (numărul de zone) și KK (numărul de jucători). Pe următoarea linie se află NN numere reprezentând numărul de vaci de pe fiecare zonă. Pe următoarele KK linii se află două valori: pospos și coefcoef, reprezentând poziția jucătorului și coeficientul de energie pentru aruncarea de lasou. Pe următoarea linie se vor afla 4 numere: QQ, MM, aa și bb, separate prin spații. Urmează MM linii conținând perechi l,rl, r reprezentând intervalele pentru primele MM întrebări citite direct din fișier.

Date de ieșire

În fișierul de ieșire chitooc.out, pentru fiecare i[1,M]i \in [1, M], pe linia ii se va afla răspunsul la a ii-a întrebare, adică numărul maxim de vaci care se pot strânge pe o zonă și energia totală minimă necesară, folosind doar zone din intervalul [li,ri][l_i, r_i].

Iar pe următoarele linii se va afișa suma XOR a următoarelor interogări, grupate câte 100 (numărul de vaci se XOR-ează între ele, iar costurile se XOR-ează între ele).

De exemplu, dacă M=50M = 50 și Q=400Q = 400, se va afișa individual răspunsul la primele 50 de interogări, apoi câte o pereche de răspunsuri pentru query-urile din intervalele [51,150][51, 150], [151,250][151, 250], [251,350][251, 350], [351,400][351, 400].

Practic, dacă răspunsurile normale ar fi formate din perechile (vali,costi)(val_i, cost_i), unde i[1,Q]i \in [1, Q], valival_i este numărul maxim de vaci, iar costicost_i este energia minimă necesară (calculată pe baza coeficienților), atunci:

  • pentru i[1,M]i \in [1, M], se vor afișa (vali,costi)(val_i, cost_i) pe fiecare linie;
  • pentru restul întrebărilor se vor calcula și afișa perechile (sum_xor_valp,sum_xor_costp)(\text{sum\_xor\_val}_p, \text{sum\_xor\_cost}_p), cu p1p \geq 1, astfel încât:
sum_xor_valp=i=M+(p1)100+1min(M+p100,Q)vali\text{sum\_xor\_val}_p = \bigoplus_{i = M + (p-1)\cdot 100 + 1}^{\min(M + p \cdot 100,\, Q)} val_isum_xor_costp=i=M+(p1)100+1min(M+p100,Q)costi\text{sum\_xor\_cost}_p = \bigoplus_{i = M + (p-1)\cdot 100 + 1}^{\min(M + p \cdot 100,\, Q)} cost_i

Restricții și precizări

  • 1KN31051 \leq K \leq N \leq 3 \cdot 10^5
  • 1Q81061 \leq Q \leq 8 \cdot 10^6
  • 1Mmin(Q,10 000)1 \leq M \leq \min(Q, 10~000)
  • 0a,b1 000 000 0000 \leq a, b \leq 1~000~000~000
  • 0Ai1090 \leq A_i \leq 10^9
  • 1pos1<pos2<<posKN1 \leq pos_1 < pos_2 < \dots < pos_{K} \leq N
  • 0coefi1090 \leq coef_i \leq 10^9, pentru i=1,,Ki=1, \dots, K.
  • 1lrN1 \leq l \leq r \leq N
# Punctaj Restricții
1 7 N,Q200N, Q \leq 200
2 24 NQ106N \cdot Q \leq 10^6
3 5 KQ106K \cdot Q \leq 10^6
4 45 N,Q105N, Q \leq 10^5
5 19 Fără alte restricții

Exemplul 1

chitooc.in

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

chitooc.out

16 11
6 6
10 0

Explicație

Pentru primul exemplu: pentru a obține valoarea maximă și costul minim o să avem următoarele acțiuni:

Pentru prima întrebare:

  • jucătorul 2 trage vacile de pe poziția 2;
  • jucătorul 3 trage vacile de pe poziția 3;
  • jucătorul 4 trage vacile de pe poziția 6.

Pentru a doua întrebare:

  • jucătorul 3 trage vacile de pe poziția 5;
  • jucătorul 4 trage vacile de pe poziția 6.

Pentru a treia întrebare:

  • jucătorii nu o să facă nimic, iar numărul maxim de vaci o să fie 10.

Exemplul 2

chitooc.in

10 4
1 5 1 7 2 5 4 1 8 2
2 9
3 2
4 3
5 6
10 2 834673673 923993984
3 3
4 6

chitooc.out

1 0
9 6
30 20

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