Kim tự tháp XOR

Đề bài

Mô tả

Với một dãy b gồm m phần tử, định nghĩa hàm f như sau:

f(b)={b1nếu m=1f(b1b2, b2b3, , bm1bm)nếu m>1

trong đó là phép XOR (hoặc loại trừ theo bit).

Nói cách khác, ta liên tục thay dãy hiện tại bằng dãy các phép XOR của những cặp phần tử liền kề, cho tới khi chỉ còn một số. Số đó chính là giá trị của f.

Ví dụ: f(1,2,4,8)=f(12, 24, 48)=f(3,6,12)=f(5,10)=f(15)=15.

Cho một dãy a gồm n phần tử và q truy vấn. Mỗi truy vấn gồm hai số nguyên lr. Với mỗi truy vấn, hãy tìm giá trị lớn nhất của f trên mọi đoạn con liên tiếp của dãy al,al+1,,ar.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n: độ dài dãy a.
  • Dòng thứ hai chứa n số nguyên a1,a2,,an.
  • Dòng thứ ba chứa số nguyên q: số truy vấn.
  • q dòng tiếp theo, mỗi dòng chứa hai số nguyên lr mô tả một truy vấn.

Dữ liệu ra

In ra q dòng, mỗi dòng là đáp án cho truy vấn tương ứng.

Ràng buộc

  • 1n5000
  • 0ai2301
  • 1q105
  • 1lrn

Ví dụ

Input Output Giải thích
6
1 2 4 8 16 32
4
1 6
2 5
3 4
1 2
60
30
12
3
Truy vấn 1: đoạn con tối ưu là [3,6] với f(4,8,16,32)=60. Truy vấn 2: đoạn con [2,5] cho f(2,4,8,16)=30. Truy vấn 3: đoạn [3,4] cho f(4,8)=48=12. Truy vấn 4: đoạn [1,2] cho 12=3.
3
8 4 1
2
2 3
1 2
5
12
Truy vấn 1 trên [4,1]: giá trị lớn nhất là f(4,1)=41=5. Truy vấn 2 trên [8,4]: giá trị lớn nhất là f(8,4)=84=12.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0