現在,有一個長度 $N$ 的非負整數序列 $a_1, a_2, \dots, a_N$, 請幫忙計算區間的 NAND。
對於 $l, r$ 區間來說, 所謂區間的 NAND 就是把裡面每個元素由左到右依序做 NAND 運算,也就是
$$ f(l, r) = NAND(NAND(\dots NAND(a_l, a_{l+1}), a_{l+2}, \dots, a_r) $$
此外,若 $l=r$ 則定義 $f(l, r) = a_l$。
其中兩個數字的 NAND 定義為,將兩個數字的二進位表示法寫下來,並往高位補 0 直到長度為 $C$ 後,按位 NAND 的結果。
輸入第一行有三個正整數 $N, Q, C$。
輸入第二行有 $N$ 個非負整數 $a_1, a_2, \ldots, a_N$。
接下來 $Q$ 行,每行可能是下面的其中一種:
資料滿足:
對於每個種類 1 的詢問,請輸出一行為 $f(l, r)$ 的值。
以下為計算兩個整數的 NAND 範例
int C;
int nand(int x, int y) {
int mask = (1 << C) - 1;
int ret = ~(x & y);
return ret & mask;
}
IOICamp 2022 Day2 pG
No. | Testdata Range | Constraints | Score |
---|---|---|---|
1 | 0~1 | 範例測資 | 0 |
2 | 0~11 | $N, Q \leq 100$ | 25 |
3 | 0~31 | 無額外限制 | 75 |