luogu#P9775. [HUSTFC 2023] 广义线段树

[HUSTFC 2023] 广义线段树

题目描述

对于任意长度为 nn 的序列 aa,可以基于 aa 建立一个广义线段树。广义线段树是一个有 (2n1)(2n-1) 个节点的带权二叉树,对于每个编号为 pp 的节点,都有两个属性 LpL_pRpR_p,表示其维护的区间为 [Lp,Rp][L_p,R_p],同时其权值 Mp=i=LpRpaiM_p =\prod_{i=L_p}^{R_p}a_i 。另外,广义线段树还满足如下性质:

  • 所有编号为 p[n,2n1]p\in [n,2n-1] 的节点是叶节点,同时 Lp=Rp=p+1nL_p = R_p = p + 1 - n
  • 所有编号为 p[1,n1]p\in [1,n-1] 的节点是非叶节点,其必定有左儿子 XpX_p 和右儿子 YpY_p,且 p<Xp<Ypp < X_p < Y_p。节点 pp 维护的区间为左右儿子维护区间之并,且保证维护区间连续。形式化地,有 RXp=LYp1R_{X_p}=L_{Y_p}-1,且 Lp=LXpL_p=L_{X_p}Rp=RYpR_p=R_{Y_p}

例如,下面是一个基于 n=4n=4 的序列 a={1,2,3,4}a=\{1, 2, 3, 4\} 建立的广义线段树(节点内整数对 (p,Mp)(p,M_p) 分别表示编号和权值)。可以发现,广义线段树的形态并不唯一。

1

对这个广义线段树而言:

  • [L7,R7]=[4,4][L_7, R_7] = [4, 4],故 M7=a4M_7 = a_4
  • [L6,R6]=[3,3][L_6, R_6] = [3, 3],故 M6=a3M_6 = a_3
  • [L5,R5]=[2,2][L_5, R_5] = [2, 2],故 M5=a2M_5 = a_2
  • [L4,R4]=[1,1][L_4, R_4] = [1, 1],故 M4=a1M_4 = a_1
  • [L3,R3]=[L4,R5]=[1,2][L_3, R_3] = [L_4, R_5] = [1, 2],故 M3=a1×a2M_3 = a_1 \times a_2
  • [L2,R2]=[L3,R6]=[1,3][L_2, R_2] = [L_3, R_6] = [1, 3],故 M2=a1×a2×a3M_2 = a_1 \times a_2 \times a_3
  • [L1,R1]=[L2,R7]=[1,4][L_1, R_1] = [L_2, R_7] = [1, 4],故 M1=a1×a2×a3×a4M_1 = a_1 \times a_2 \times a_3 \times a_4

分别给定长度为 nn 的序列 aabb 以及节点数为 (2n1)(2n-1) 的广义线段树 TT 的形态(即每个节点的左右儿子编号),然后你需要执行 nn 次操作,第 ii 次操作为将 aia_i 变成 ai×bia_i\times b_i

每次操作结束后,你需要基于修改后的序列 aa 建立与 TT 形态相同的广义线段树,并求出所有节点的权值和,即 i=12n1Mi\sum_{i=1}^{2n-1}M_i。由于结果可能会非常大,你只需要求出其对 998244353998\,244\,353 取模后的值。

输入格式

第一行包含一个整数 n (1n5105)n\ (1\le n\le 5\cdot 10^5),表示序列 aabb 的长度。

第二行包含 nn 个整数,其中第 ii 个整数定义为 ai (1ai<998244353)a_i\ (1 \le a_i < 998\,244\,353)

第三行包含 nn 个整数,其中第 ii 个整数定义为 bi (1bi<998244353)b_i\ (1 \le b_i < 998\,244\,353)

接下来 n1n-1 行,其中第 ii 行包含两个整数 Xi,Yi (i<Xi<Yi2n1)X_i,Y_i\ (i<X_i<Y_i\le 2n-1),分别表示节点 ii 的左右儿子编号。保证输入的广义线段树形态符合题目要求。

输出格式

输出一行用空格间隔的 nn 个整数,其中第 ii 个整数表示第 ii 次修改后的答案对 998244353998\,244\,353 取模后的值。

4
1 2 3 4
2 3 2 3
2 7
3 6
4 5

75 207 390 974 

提示

样例中广义线段树的形态和题面中的例子相同。

第一次修改后,a1a_1 变为 a1×b1=1×2=2a_1 \times b_1 = 1 \times 2 = 2,因而新的 a={2,2,3,4}a = \{2, 2, 3, 4\}。可以计算出:

  • M7=a4=4M_7 = a_4 = 4
  • M6=a3=3M_6 = a_3 = 3
  • M5=a2=2M_5 = a_2 = 2
  • M4=a1=2M_4 = a_1 = 2
  • M3=a1×a2=2×2=4M_3 = a_1 \times a_2 = 2 \times 2 = 4
  • $M_2 = a_1 \times a_2 \times a_3 = 2 \times 2 \times 3 = 12$
  • $M_1 = a_1 \times a_2 \times a_3 \times a_4 = 2 \times 2 \times 3 \times 4 = 48$

故权值之和为 M1+M2++M7=75M_1 + M_2 + \ldots + M_7 = 75

第二次修改后,a2a_2 变为 a2×b2=2×3=6a_2 \times b_2 = 2 \times 3 = 6。后续的操作与第一次操作类似,此处不再赘述。