Đảo và hoán đổi

Đề bài

Mô tả

Cho mảng a có độ dài 2n. Bạn cần xử lý q truy vấn, mỗi truy vấn thuộc một trong bốn loại sau:

  1. Replace(x,k) — gán ax:=k.
  2. Reverse(k) — với mỗi i1, đảo ngược đoạn con [(i1)·2k+1,i·2k].
  3. Swap(k) — với mỗi i1, hoán đổi hai đoạn con liền kề [(2i2)·2k+1,(2i1)·2k][(2i1)·2k+1,2i·2k].
  4. Sum(l,r) — in ra tổng các phần tử của đoạn [l,r].

Hãy viết chương trình xử lý các truy vấn cho trước một cách hiệu quả.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên n,q — chiều dài luỹ thừa 2 của mảng và số truy vấn.
  • Dòng thứ hai chứa 2n số nguyên a1,a2,,a2n.
  • q dòng tiếp theo mỗi dòng mô tả một truy vấn theo một trong các định dạng:
    • "1 x k" — Replace(x,k), với 1x2n, 0k109.
    • "2 k" — Reverse(k), với 0kn.
    • "3 k" — Swap(k), với 0k<n.
    • "4 l r" — Sum(l,r), với 1lr2n.

Bảo đảm có ít nhất một truy vấn loại 4.

Dữ liệu ra

In ra đáp án của mỗi truy vấn Sum, mỗi đáp án trên một dòng riêng.

Ràng buộc

  • 0n18
  • 1q105
  • 0ai109

Ví dụ

Input Output Giải thích
2 3
7 4 9 9
1 2 8
3 1
4 2 4
24 Sau truy vấn 1: a={7,8,9,9}. Sau truy vấn Swap(1): a={9,9,7,8}. Sum(2,4)=9+7+8=24.
3 8
7 0 8 8 7 1 5 2
4 3 7
2 1
3 2
4 1 6
2 3
1 5 16
4 8 8
3 0
29
22
1
Sum(3,7)=8+8+7+1+5=29. Reverse(1)a={0,7,8,8,1,7,2,5}. Swap(2)a={1,7,2,5,0,7,8,8}. Sum(1,6)=22. Reverse(3)a={8,8,7,0,5,2,7,1}. Replace(5,16)a={8,8,7,0,16,2,7,1}. Sum(8,8)=1.

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