CF1588F.Jumping Through the Array
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定一个大小为 n 的整数数组 a 和一个大小为 n 的排列 p。有 q 个三种类型的操作:
- 给定 l 和 r,计算数组 a 在区间 [l,r] 上的和:i=l∑rai。
- 给定 v 和 x。根据排列 p 构建一个有向图:该图有 n 个顶点和 n 条边 i→pi。设 C 为从 v 出发可达的所有顶点集合。你需要将 x 加到所有 au,其中 u 属于 C。
- 给定下标 i 和 j,交换 pi 和 pj。
上图为排列 [2,3,1,5,4] 对应的有向图。请处理所有操作,并输出所有第一类操作的答案。
输入格式
第一行包含一个整数 n(1≤n≤2⋅105),表示数组和排列的大小。
第二行包含 n 个整数 a1,a2,…,an(−108≤ai≤108)。
第三行包含 n 个互不相同的整数 p1,p2,…,pn(1≤pi≤n)。
第四行包含一个整数 q,表示操作的数量(1≤q≤2⋅105)。
接下来的 q 行,每行描述一个操作。第 i 行以一个整数 ti(1≤ti≤3)开头,表示操作类型。
- 如果 ti=1,该行还包含两个整数 l、r(1≤l≤r≤n)。
- 如果 ti=2,该行还包含两个整数 v、x(1≤v≤n,−108≤x≤108)。
- 如果 ti=3,该行还包含两个整数 i、j(1≤i,j≤n)。
输出格式
对于每个第一类操作,输出一个整数,表示该操作的答案。
输入输出样例
输入#1
5 6 9 -5 3 0 2 3 1 5 4 6 1 1 5 2 1 1 1 1 5 3 1 5 2 1 -1 1 1 5
输出#1
13 16 11
输入#2
8 -15 52 -4 3 5 9 0 5 2 4 6 8 1 3 5 7 10 2 2 2 2 5 -1 1 1 8 1 1 5 1 5 8 3 1 6 2 1 50 1 1 8 2 6 -20 1 1 8
输出#2
61 45 22 461 301
输入#3
1 1 1 1 1 1 1
输出#3
1
说明/提示
在第一个样例中:
这是初始排列对应的有向图。共有 6 个操作。
- 区间 1 到 5 的和为 a1+a2+a3+a4+a5=6+9+(−5)+3+0=13。
- 从 1 出发可达 {1,2,3}。操作后 a 变为 [7,10,−4,3,0]。
- 区间 1 到 5 的和为 a1+a2+a3+a4+a5=7+10+(−4)+3+0=16。
- 操作后 p=[4,3,1,5,2]。
这是新排列对应的有向图。 - 从 2 出发可达 {1,2,3,4,5}。操作后 a 变为 [6,9,−5,2,−1]。
- 区间 1 到 5 的和为 a1+a2+a3+a4+a5=6+9+(−5)+2+(−1)=11。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?