CF1401F.Reverse and Swap
提高+/省选-
通过率:0%
时间限制:3.00s
内存限制:256MB
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.
给你一个长度为 2n 的数组 a。你需要处理 q 个对该数组的查询。每个查询属于以下 4 种类型之一:
- Replace(x,k) — 将 ax 修改为 k;
- Reverse(k) — 对每个 i(i≥1),将子数组 [(i−1)⋅2k+1,i⋅2k] 进行翻转;
- Swap(k) — 对每个 i(i≥1),交换子数组 [(2i−2)⋅2k+1,(2i−1)⋅2k] 与子数组 [(2i−1)⋅2k+1,2i⋅2k];
- Sum(l,r) — 输出子数组 [l,r] 中所有元素的和。
请编写一个能快速处理上述查询的程序。
输入格式
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.
第一行包含两个整数 n、q(0≤n≤18;1≤q≤105)—— 分别表示数组 a 的长度和查询次数。
第二行包含 2n 个整数 a1,a2,…,a2n(0≤ai≤109)。
接下来 q 行,每行一个查询。每个查询为以下四种类型之一:
- “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)。
保证至少存在一个 Sum 查询。
输出格式
Print the answer for each Sum query.
对每个 Sum 查询,输出答案。
输入输出样例
输入#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.
在第一个样例中,初始时数组 a 为 7,4,9,9。
处理第一个查询后,数组 a 变为 7,8,9,9。
处理第二个查询后,数组 ai 变为 9,9,7,8。
因此,第三个查询的答案为 9+7+8=24。
在第二个样例中,初始时数组 a 为 7,0,8,8,7,1,5,2。接下来的操作如下:
- 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。
输入解题思路,AI测评打分。不知道怎么写?