CF1588F.Jumping Through the Array

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定一个大小为 nn 的整数数组 aa 和一个大小为 nn 的排列 pp。有 qq 个三种类型的操作:

  1. 给定 ll 和 rr,计算数组 aa 在区间 [l,r][l, r] 上的和:∑i=lrai\sum\limits_{i=l}^{r} a_i。
  2. 给定 vv 和 xx。根据排列 pp 构建一个有向图:该图有 nn 个顶点和 nn 条边 i→pii \to p_i。设 CC 为从 vv 出发可达的所有顶点集合。你需要将 xx 加到所有 aua_u,其中 uu 属于 CC。
  3. 给定下标 ii 和 jj,交换 pip_i 和 pjp_j。

上图为排列 [2,3,1,5,4][2, 3, 1, 5, 4] 对应的有向图。请处理所有操作,并输出所有第一类操作的答案。

输入格式

第一行包含一个整数 nn(1≤n≤2⋅1051 \le n \le 2 \cdot 10^5),表示数组和排列的大小。

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(−108≤ai≤108-10^8 \le a_i \le 10^8)。

第三行包含 nn 个互不相同的整数 p1,p2,…,pnp_1, p_2, \ldots, p_n(1≤pi≤n1 \le p_i \le n)。

第四行包含一个整数 qq,表示操作的数量(1≤q≤2⋅1051 \le q \le 2 \cdot 10^5)。

接下来的 qq 行,每行描述一个操作。第 ii 行以一个整数 tit_i(1≤ti≤31 \le t_i \le 3)开头,表示操作类型。

  • 如果 ti=1t_i = 1,该行还包含两个整数 ll、rr(1≤l≤r≤n1 \le l \le r \le n)。
  • 如果 ti=2t_i = 2,该行还包含两个整数 vv、xx(1≤v≤n1 \le v \le n,−108≤x≤108-10^8 \le x \le 10^8)。
  • 如果 ti=3t_i = 3,该行还包含两个整数 ii、jj(1≤i,j≤n1 \le i, j \le 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

说明/提示

在第一个样例中:

这是初始排列对应的有向图。共有 66 个操作。

  1. 区间 11 到 55 的和为 a1+a2+a3+a4+a5=6+9+(−5)+3+0=13a_1 + a_2 + a_3 + a_4 + a_5 = 6 + 9 + (-5) + 3 + 0 = 13。
  2. 从 11 出发可达 {1,2,3}\{1, 2, 3\}。操作后 aa 变为 [7,10,−4,3,0][7, 10, -4, 3, 0]。
  3. 区间 11 到 55 的和为 a1+a2+a3+a4+a5=7+10+(−4)+3+0=16a_1 + a_2 + a_3 + a_4 + a_5 = 7 + 10 + (-4) + 3 + 0 = 16。
  4. 操作后 p=[4,3,1,5,2]p = [4, 3, 1, 5, 2]。 这是新排列对应的有向图。
  5. 从 22 出发可达 {1,2,3,4,5}\{1, 2, 3, 4, 5\}。操作后 aa 变为 [6,9,−5,2,−1][6, 9, -5, 2, -1]。
  6. 区间 11 到 55 的和为 a1+a2+a3+a4+a5=6+9+(−5)+2+(−1)=11a_1 + a_2 + a_3 + a_4 + a_5 = 6 + 9 + (-5) + 2 + (-1) = 11。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页