OrQueries

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,cZa, 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,b2Za_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

  • 1Q100 0001 \leq Q \leq 100\ 000
  • 0ci<2310 \leq c_i < 2^{31}
  • 1aL,bL,a1L,b1L,a2L,b2L1 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, Q1000Q \leq 1000.
  • Pentru alte teste in valoare de 1515 puncte, aLbL,a1Lb1L,a2Lb2LZ;1aLbL,a1Lb1L,a2Lb2L100 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, a1Lb1L=a2Lb2L\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, aLbL,a1Lb1L,a2Lb2LZ;1aLbL,a1Lb1L,a2Lb2L100 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, 0ci10 \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 1L=12L=2=0.5\frac{1 \oplus L = 1}{2 \oplus L = 2} = 0.5 cu ponderele 55 si 3L=34L=3=0.75\frac{3 \oplus L = 3}{4 \oplus L = 3} = 0.75 cu ponderele 33.

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

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

A patra operatie face query intre punctele 3L=42L=5=0.8\frac{3 \oplus L = 4}{2 \oplus L = 5} = 0.8 si 4L=32L=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 23=123=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 5L=52L=2=2.5\frac{5 \oplus L = 5}{2 \oplus L = 2} = 2.5 cu ponderele 11 si 2L=25L=5=0.4\frac{2 \oplus L = 2}{5 \oplus L = 5} = 0.4 cu ponderele 22.

A treia operatie face query intre punctele 1L=12L=2=0.5\frac{1 \oplus L = 1}{2 \oplus L = 2} = 0.5 si 4L=45L=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 2L=25L=5=0.4\frac{2 \oplus L = 2}{5 \oplus L = 5} = 0.4 si 5L=52L=2=2.5\frac{5 \oplus L = 5}{2 \oplus L = 2} = 2.5. Cum toate punctele sunt incluse, rezultatul este 12=31 \vert 2 = 3.

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

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