CF1044D.Deduction Queries

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

There is an array aa of 2302^{30} integers, indexed from 00 to 23012^{30}-1 . Initially, you know that 0ai<2300 \leq a_i < 2^{30} ( 0i<2300 \leq i < 2^{30} ), but you do not know any of the values. Your task is to process queries of two types:

  • 1 l r x: You are informed that the bitwise xor of the subarray [l,r][l, r] (ends inclusive) is equal to xx . That is, alal+1ar1ar=xa_l \oplus a_{l+1} \oplus \ldots \oplus a_{r-1} \oplus a_r = x , where \oplus is the bitwise xor operator. In some cases, the received update contradicts past updates. In this case, you should ignore the contradicting update (the current update).
  • 2 l r: You are asked to output the bitwise xor of the subarray [l,r][l, r] (ends inclusive). If it is still impossible to know this value, considering all past updates, then output 1-1 .

Note that the queries are encoded. That is, you need to write an online solution.

输入格式

The first line contains a single integer qq ( 1q21051 \leq q \leq 2 \cdot 10^5 ) — the number of queries.

Each of the next qq lines describes a query. It contains one integer tt ( 1t21 \leq t \leq 2 ) — the type of query.

The given queries will be encoded in the following way: let lastlast be the answer to the last query of the second type that you have answered (initially, last=0last = 0 ). If the last answer was 1-1 , set last=1last = 1 .

  • If t=1t = 1 , three integers follow, ll' , rr' , and xx' ( 0l,r,x<2300 \leq l', r', x' < 2^{30} ), meaning that you got an update. First, do the following: l=llastl = l' \oplus last , r=rlastr = r' \oplus last , x=xlastx = x' \oplus last and, if l>rl > r , swap ll and rr .

    This means you got an update that the bitwise xor of the subarray [l,r][l, r] is equal to xx (notice that you need to ignore updates that contradict previous updates).

  • If t=2t = 2 , two integers follow, ll' and rr' ( 0l,r<2300 \leq l', r' < 2^{30} ), meaning that you got a query. First, do the following: l=llastl = l' \oplus last , r=rlastr = r' \oplus last and, if l>rl > r , swap ll and rr .

    For the given query, you need to print the bitwise xor of the subarray [l,r][l, r] . If it is impossible to know, print 1-1 . Don't forget to change the value of lastlast .

It is guaranteed there will be at least one query of the second type.

输出格式

After every query of the second type, output the bitwise xor of the given subarray or 1-1 if it is still impossible to know.

输入输出样例

  • 输入#1

    12
    2 1 2
    2 1 1073741822
    1 0 3 4
    2 0 0
    2 3 3
    2 0 3
    1 6 7 3
    2 4 4
    1 0 2 1
    2 0 0
    2 4 4
    2 0 0
    

    输出#1

    -1
    -1
    -1
    -1
    5
    -1
    6
    3
    5
    
  • 输入#2

    4
    1 5 5 9
    1 6 6 5
    1 6 5 10
    2 6 5
    

    输出#2

    12
    

说明/提示

In the first example, the real queries (without being encoded) are:

  • 12

  • 2 1 2

  • 2 0 1073741823

  • 1 1 2 5

  • 2 1 1

  • 2 2 2

  • 2 1 2

  • 1 2 3 6

  • 2 1 1

  • 1 1 3 0

  • 2 1 1

  • 2 2 2

  • 2 3 3

  • The answers for the first two queries are 1-1 because we don't have any such information on the array initially.

  • The first update tells us a1a2=5a_1 \oplus a_2 = 5 . Note that we still can't be certain about the values a1a_1 or a2a_2 independently (for example, it could be that a1=1,a2=4a_1 = 1, a_2 = 4 , and also a1=3,a2=6a_1 = 3, a_2 = 6 ).

  • After we receive all three updates, we have enough information to deduce a1,a2,a3a_1, a_2, a_3 independently.

In the second example, notice that after the first two updates we already know that a5a6=12a_5 \oplus a_6 = 12 , so the third update is contradicting, and we ignore it.

首页