RoAlgo PreOJI 2026 X | OrQueries

This was the problem page during the contest. Access the current page here.
Time limit: 1.67s Memory limit: 333MB Input: orqueries.in Output: orqueries.out

Cerință

Se considera axa OxOx. Putem face urmatoarele operatii:

  • 11: Adaugam punctul xx, la pozitia ab\frac{a}{b} pe axa, cu ponderele cc, unde a,b,c∈Za, b, c \in \Z.
  • 22: Consideram toate punctele intre a1b1\frac{a_1}{b_1} si a2b2\frac{a_2}{b_2} inclusiv, unde a1,b1,a2,b2∈Za_1, b_1, a_2, b_2 \in \Z. Sa se afle SAU-ul pe biti al lor.

Date de intrare

Pe prima linie a fișierului de intrare orqueries.in se găseste numarul natural QQ, reprezentand numarul de operatii pe care le efectuam.

Pe urmatoarele QQ linii se vor afla tuple de forma 1 a b c1\ a\ b\ c, sau 2 a1 b1 a2 b22\ a_1\ b_1\ a_2\ b_2, in functie de tipul operatiei efectuate.

Atentie! Initial, vom considera L=0L = 0. Pentru fiecare operatie, vom XOR-a aa, bb sau a1a_1, b1b_1, a2a_2, b2b_2 in functie de operatie cu LL pentru a afla valoarea adevarata a variabilei. Ulterior, LL va fi egal cu rezultatul ultimei operatii de tip 22.

Date de ieșire

Pentru fiecare operatie de tip 22, se va afisa rezultatul SAU-ului pe biti al punctelor intre a1b1\frac{a_1}{b_1} si a2b2\frac{a_2}{b_2} pe cate o linie in fisierul orqueries.out.

Restricții și precizări

  • 1≤Q≤100 0001 \leq Q \leq 100\ 000
  • 0≤ci<2310 \leq c_i < 2^{31}
  • 1≤a⊕L,b⊕L,a1⊕L,b1⊕L,a2⊕L,b2⊕L≤1 000 000 0001 \leq a \oplus L, b \oplus L, a_1 \oplus L, b_1 \oplus L, a_2 \oplus L, b_2 \oplus L \leq 1\ 000\ 000\ 000, la orice moment, unde notam operatia XOR cu ⊕\oplus.
  • Atentie! Pot exista mai multe puncte in aceeasi coordonata.
  • Pentru teste in valoare de 3030 de puncte, Q≤1000Q \leq 1000.
  • Pentru alte teste in valoare de 1515 puncte, a⊕Lb⊕L,a1⊕Lb1⊕L,a2⊕Lb2⊕L∈Z;1≤a⊕Lb⊕L,a1⊕Lb1⊕L,a2⊕Lb2⊕L≤100 000\frac{a \oplus L}{b \oplus L}, \frac{a_1 \oplus L}{b_1 \oplus L}, \frac{a_2 \oplus L}{b_2 \oplus L} \in \Z; 1 \leq \frac{a \oplus L}{b \oplus L}, \frac{a_1 \oplus L}{b_1 \oplus L}, \frac{a_2 \oplus L}{b_2 \oplus L} \leq 100\ 000, a1⊕Lb1⊕L=a2⊕Lb2⊕L\frac{a_1 \oplus L}{b_1 \oplus L} = \frac{a_2 \oplus L}{b_2 \oplus L}
  • Pentru alte teste in valoare de 1515 puncte, a⊕Lb⊕L,a1⊕Lb1⊕L,a2⊕Lb2⊕L∈Z;1≤a⊕Lb⊕L,a1⊕Lb1⊕L,a2⊕Lb2⊕L≤100 000\frac{a \oplus L}{b \oplus L}, \frac{a_1 \oplus L}{b_1 \oplus L}, \frac{a_2 \oplus L}{b_2 \oplus L} \in \Z; 1 \leq \frac{a \oplus L}{b \oplus L}, \frac{a_1 \oplus L}{b_1 \oplus L}, \frac{a_2 \oplus L}{b_2 \oplus L} \leq 100\ 000
  • Pentru alte teste in valoare de 2020 de puncte, 0≤ci≤10 \leq c_i \leq 1.
  • Pentru alte teste in valoare de 2020 de puncte, nicio restrictie suplimentara.

Exemplul 1

orqueries.in

5
1 1 2 5
1 3 4 3
2 1 3 1 1
2 3 2 4 2
1 2 2 8

orqueries.out

7
3

Explicație

Initial, L=0L = 0.

Primele doua operatii insereaza punctele 1⊕L=12⊕L=2=0.5\frac{1 \oplus L = 1}{2 \oplus L = 2} = 0.5 cu ponderele 55 si 3⊕L=34⊕L=3=0.75\frac{3 \oplus L = 3}{4 \oplus L = 3} = 0.75 cu ponderele 33.

A treia operatie face query intre punctele 1⊕L=13⊕L=3=0.(3)\frac{1 \oplus L = 1}{3 \oplus L = 3} = 0.(3) si 1⊕L=11⊕L=1=1\frac{1 \oplus L = 1}{1 \oplus L = 1} = 1. Toate punctele sunt incluse, asadar rezultatul este 5∣3=75 \vert 3 = 7, unde notam operatia OR cu ∣\vert.

Dupa a treia operatie, L=7L = 7.

A patra operatie face query intre punctele 3⊕L=42⊕L=5=0.8\frac{3 \oplus L = 4}{2 \oplus L = 5} = 0.8 si 4⊕L=32⊕L=5=0.6\frac{4 \oplus L = 3}{2 \oplus L = 5} = 0.6. Doar punctul 34=0.75\frac{3}{4} = 0.75 cu ponderele 33 este inclus, asadar rezultatul este 33.

Dupa a patra operatie, L=3L = 3.

A cincea operatie insereaza punctul 2⊕3=12⊕3=1=1\frac{2 \oplus 3 = 1}{2 \oplus 3 = 1} = 1 cu ponderele 88.

Exemplul 2

orqueries.in

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

orqueries.out

0
3

Explicație

Initial, L=0L = 0.

Primele doua operatii insereaza punctele 5⊕L=52⊕L=2=2.5\frac{5 \oplus L = 5}{2 \oplus L = 2} = 2.5 cu ponderele 11 si 2⊕L=25⊕L=5=0.4\frac{2 \oplus L = 2}{5 \oplus L = 5} = 0.4 cu ponderele 22.

A treia operatie face query intre punctele 1⊕L=12⊕L=2=0.5\frac{1 \oplus L = 1}{2 \oplus L = 2} = 0.5 si 4⊕L=45⊕L=5=0.8\frac{4 \oplus L = 4}{5 \oplus L = 5} = 0.8. Cum nu exista niciun punct intre aceste coordonate, rezultatul este 00.

Dupa a treia operatie, L=0L = 0.

A patra operatie face query intre punctele 2⊕L=25⊕L=5=0.4\frac{2 \oplus L = 2}{5 \oplus L = 5} = 0.4 si 5⊕L=52⊕L=2=2.5\frac{5 \oplus L = 5}{2 \oplus L = 2} = 2.5. Cum toate punctele sunt incluse, rezultatul este 1∣2=31 \vert 2 = 3.

Dupa a patra operatie, L=3L = 3.

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