CF1401F.Reverse and Swap
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
You are given an array a of length 2n . You should process q queries on it. Each query has one of the following 4 types:
- Replace(x,k) — change ax to k ;
- Reverse(k) — reverse each subarray [(i−1)⋅2k+1,i⋅2k] for all i ( i≥1 );
- Swap(k) — swap subarrays [(2i−2)⋅2k+1,(2i−1)⋅2k] and [(2i−1)⋅2k+1,2i⋅2k] for all i ( i≥1 );
- Sum(l,r) — print the sum of the elements of subarray [l,r] .
Write a program that can quickly process given queries.
输入格式
The first line contains two integers n , q ( 0≤n≤18 ; 1≤q≤105 ) — the length of array a and the number of queries.
The second line contains 2n integers a1,a2,…,a2n ( 0≤ai≤109 ).
Next q lines contains queries — one per line. Each query has one of 4 types:
- " 1 x k " ( 1≤x≤2n ; 0≤k≤109 ) — Replace(x,k) ;
- " 2 k " ( 0≤k≤n ) — Reverse(k) ;
- " 3 k " ( 0≤k<n ) — Swap(k) ;
- " 4 l r " ( 1≤l≤r≤2n ) — Sum(l,r) .
It is guaranteed that there is at least one Sum query.
输出格式
Print the answer for each Sum query.
输入输出样例
输入#1
2 3 7 4 9 9 1 2 8 3 1 4 2 4
输出#1
24
输入#2
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
输出#2
29 22 1
说明/提示
In the first sample, initially, the array a is equal to {7,4,9,9} .
After processing the first query. the array a becomes {7,8,9,9} .
After processing the second query, the array ai becomes {9,9,7,8}
Therefore, the answer to the third query is 9+7+8=24 .
In the second sample, initially, the array a is equal to {7,0,8,8,7,1,5,2} . What happens next is:
- Sum(3,7) → 8+8+7+1+5=29 ;
- Reverse(1) → {0,7,8,8,1,7,2,5} ;
- Swap(2) → {1,7,2,5,0,7,8,8} ;
- Sum(1,6) → 1+7+2+5+0+7=22 ;
- Reverse(3) → {8,8,7,0,5,2,7,1} ;
- Replace(5,16) → {8,8,7,0,16,2,7,1} ;
- Sum(8,8) → 1 ;
- Swap(0) → {8,8,0,7,2,16,1,7} .