2024.1 做题记录

1.08

CF235C

求每个询问串的所有循环同构在主串中出现的次数总和。

向后遍历可做,现在需要删掉开头。删除开头 ll11,如果 l=lenlnkpl=len_{lnk_p},那 pp 就不能再在这个节点,p=lnkpp=lnk_p

1.09

P4094

子串 s[a...b]s[a...b] 的所有子串和 s[c...d]s[c...d] 的最长公共前缀的长度的最大值。

二分答案 midmid,询问 s[c...c+mid1]s[c...c+mid-1] 是否在 s[a...b]s[a...b] 中出现。设节点 pp 表示 s[c,c+mid1]s[c,c+mid-1],问 pp 的 endpos 是否在 [a+mid1,b][a+mid-1,b] 中有元素。

记录 pp 表示 s[1...i]s[1...i],倍增 parent tree 跳到 lenpmidlen_p\leq mid。动态开点线段树合并 endpos 集合。

1.10

CF1237H

因为是对偶数位操作,将每两位和为一位。令 000000010111101022111133。如果有解,则 suma0=sumb0,suma3=sumb3,suma1+suma2=sumb1+sumb2suma0=sumb0,suma3=sumb3,suma1+suma2=sumb1+sumb2

考虑从一个大问题转换为小问题。要找到一种方法使得在不改变其他结构的同时移动 aia_i。操作 2×i22\times i-22×i2\times i 可以实现两步将 aia_i 换到 a1a_1a1...i1a_{1...{i-1}} 不改变结构的移到 a2...ia_{2...i}

所以从后向前,设当前维护到 aia_i,此时 a1...i1a_{1...{i-1}} 分别等于 bni+2...nb_{{n-i+2}...n}。找到 aj=bni+1a_j=b_{n-i+1}iji\leq j,执行上面操作即可。共 NN 次操作。

现在问题是,suma1sumb1suma1\neq sumb1 ,我们要反转一次使 suma1=sumb1suma1=sumb1

我们可以找到 aa 中某个前缀,使得 suma1suma1i+suma2i=sumb1suma1-suma1_i+suma2_i=sumb1,翻转这个前缀。否则一定有 bb 的某个前缀,使得 sumb1sumb1i+sumb2i=suma1sumb1-sumb1_i+sumb2_i=suma1。这时翻转 bb 的这个前缀得到 bb',把 aa 做成 bb' 再翻转这个前缀。

CF1329D

转换题意。对于 si=si+1s_i=s_{i+1}ii,加入 aaaa 长为 mm

发现可行的 ss 上操作对应 aa 上:

  • aa 上删 ai,ai+1a_i,a_{i+1},其中 aiai+1a_i\neq a_{i+1}ss 上删 s[ai+1,ai+1]s[a_i+1,a_{i+1}],形如 b...[bca]...a。

  • aa 上删 aia_i,其中 aiai+1a_i\neq a_{i+1}ss 上删 a[1,ai]a[1,a_i],形如 [bca]...a。

显然优先操作一,答案与 aa 中出现次数最大的 pp 有关,设为 tpt_p

  • tp×2>mt_p\times2>m。所有非 pp 都与 pp 操作一,用栈模拟,知道无法操作为止。

  • 其他情况。能配就配,直到成为上面的情况。用栈模拟,动态维护 ttpp

从左到右操作,可以不用线段树,记录已删除量 deldel。处理细节。

结束后栈不空,用操作二一个一个做。可能忽略 s[am+1,n]s[a_m+1,n],再用一次操作全部做完。

CF1396E

先求出可行的最大最小答案。

一条边将树分为 sizAsizAsizBsizB,能贡献最大为 min(sizA,sizB)min(sizA,sizB),最小为 sizAmod2sizA\bmod 2。最大时,A,BA,B间两两连边,最小时,A,BA,B 内部互相连,多出 sizAmod2sizA \bmod 2

拆开 min(sizA,sizB)min(sizA,sizB),可以取重心为根,最大贡献为向下的 sizsiz。最大时所有路径跨过根。因为重心子树大小最大小于 n2\frac{n}{2},构造取 dfn 序,dfnidfn_idfni+n2dfn_{i+\frac{n}{2}} 连边即可。

最大时点的贡献是到根的距离。取点 u,vu,v ,lca 为 tptp。本来 u,vu,v 各自的贡献是 depu+depvdep_u+dep_v,连 u,vu,v 后,贡献为 depu+depv2×deptpdep_u+dep_v-2\times dep_{tp},变化量模 2200

mxansmxans 变化为 mm。每次取出最大的 deptpdep_{tp}u,vu,v 改为互相连,然后删掉。要保持重心结构,所以从最大 sizsiz 中选。最后当 deptp>mxansmdep_{tp}>mxans-m,因为 deptpdep_{tp} 从最大往小,沿树向上一定找得到符合条件的。最后对没删掉的节点跑最大的构造。

1.11

P6240

qq 次查询区间 01 背包,值域 ttn4×104,q2×105,t200n\leq 4\times 10^4,q\leq 2\times 10^5,t\leq 200

可以 O(t)O(t) 合并背包 ffgg 求出单个 dpdp 值。dps=maxi=0sfi+gsidp_s=max_{i=0}^{s}f_i+g_{s-i}

猫树分治:选取所有询问都包含的某个位置,分别向左右预处理。对于询问的回答,只需要在左端点取信息,在右端点取信息,再合并即可。

分治 S(l,r,ql,qr)S(l,r,ql,qr) 表示处理 [l,r][l,r] 的物品和 [ql,qr][ql,qr] 的询问。取 mid=l+r2mid=\frac{l+r}{2},向左右背包。遍历 [ql,qr][ql,qr] 的询问,如果在左右就下放,否则合并算出答案。

复杂度 O(ntlogn+qt)O(nt\log n+qt)

P5576

P5546 做区间询问。

ss 作为文本串对其他所以 tt 建的 SAM 匹配。复杂度 O(sn)O(|s|n)s\sum |s| 为定值,s|s| 越小越好。

猫树分治 S(l,r,ql,qr)S(l,r,ql,qr),选最小的 sks_k 处理跨过 kk 的询问。sks_k 过长复杂度退化,不能取中点分治。

取阈值 limlim,长度小于 limlim 的为短串,在短串中取中心。如果没有短串,lim=lim×2lim=lim\times 2。对于 limlim,最多分治 logn\log n 次,区间大小 lenlim\frac{\sum len}{lim},匹配串 sslimlim。共 loglen\log {\sum len}limlim,复杂度 O(len+m)lognloglenO(\sum len+m)\log n\log len

开一个大数组,然后用指针标记位置。

P4001

平面图最小割与对偶图最短路等价。

UVA10735

有向图欧拉回路当且仅当每个点入度等于出度。给无向边定向。先随便定向,记 du=outuinu2d_u=\frac{out_u-in_u}{2}。改变方向时 du1,dv+1d_u-1,d_v+1,看作流量变化,连 (u,v,1)(u,v,1)du>0d_u>0 的连 SSdu<0d_u<0 的连 TT。跑网络流看是否满流。

CF1383F

最大流等于最小割。kk 条特殊边割或不割 2k2^k 个状态。对于一个状态,先不管特殊边边权,割掉要割的特殊边,跑最小割,在加上要割的特殊边边权,对所有状态取 min 即为答案。

当特殊边边权为 00,一定被割;边权为 maxw=25maxw=25,一定不割。

从全不割到全割的转移。在旧状态的残余网络上改边权再跑即可,dps=dpt+flowdp_s=dp_{t}+flow。记录 2k2^k 个网络和当前状态的答案。

dinic 常数大,残余网络上用 FF,不过跟复杂度无关。

1.12

CF280D

长度为 nn 的数列,支持:单点修改,区间询问至多选 kk 个的不交子段和的最大值。

(s,i,1,0),(i,i+1,1,ai),(i,t,1,0)(s,i,1,0),(i,i+1,1,a_i),(i,t,1,0)s>i>j>ts->i->j->t 表示选 [i,j)[i,j)。要求至多 kk 流的最大费用。

参考网络流反边,相当于每次取最大子段,再反转,重复 kk 次。线段树维护从左、右开始最大值和位置,区间最大值和位置,以及反过来最小值。用栈记录翻过的位置,最后翻回来。

P5996

网络流。同 P2762 太空飞行计划问题 建图方式,将物品与 ss(s,i,vi)(s,i,v_i),警察与 tt(j+n,t,vj)(j+n,t,v_j),警察与对应的物品连 (i,j+n,inf)(i,j+n,inf),答案为所有物品的收益和减最小割。n,m105n,m\leq 10^5,显然跑不了网络流。考虑模拟最大流。

首先要描述警察 jj 与物品 ii 的关系。要满足:

xixjyiyjwh\mid \frac{x_i-x_j}{y_i-y_j} \mid \leq \frac{w}{h}

xj×hyj×wxi×hyi×wx_j\times h-y_j\times w\leq x_i\times h-y_i\times w

xj×h+yj×wxi×h+yi×wx_j\times h+y_j\times w\geq x_i\times h+y_i\times w

x=x×h+y×w,y=x×hy×wx=x\times h+y\times w,y=x\times h-y\times w。得到 xixj,yiyjx_i\leq x_j,y_i\geq y_j ,能很好描述。

将物品和警察放在一起从左到右,从上到下考虑,自然满足 xixjx_i\leq x_j。贪心,一个警察 jj 的流优先从 yiyjy_i\geq y_jyiy_i 最小处流过来,因为更大的 yiy_i 能满足更多人限制。用 set 储存物品,警察处 lower_bound 查找。

gym102904B

划分序列,代价为 xx 加区间逆序对数,求最小代价。

dpi=maxdpj+calc(j+1,i)dp_i=\max dp_j+calc(j+1,i),满足决策单调性,单层转移。问题在求区间逆序对数。考虑类似莫队,要求左右两端移动次数不能过大。分治 sovle(l,r,ql,qr)sovle(l,r,ql,qr)l,rl,r 移动 O(nlogn)O(n\log n) 次,可以接受。cdq 分治分层做 sovle,维护树状数组。复杂度 O(nlog3n)O(n\log^3 n)

1.13

CF1158F

一个序列的 pp 即每次删除一个包含 [1,c][1,c] 的前缀能删的次数。

gl,rg_{l,r} 表示 [l,r][l,r] 中强制选 ara_r 并正好选出 [1,c][1,c] 的子序列数。gl,r=iarti1g_{l,r}=\prod_{i\neq a_r}t_i-1。设 fi,jf_{i,j} 表示以 jj 结尾并强制选 jj 的答案为 ii 的数量。fi,j=fi1,k+gk+1,jf_{i,j}=\sum f_{i-1,k}+g_{k+1,j}。因为答案小于 nm\frac{n}{m},复杂度 O(n3m)O(\frac{n^3}{m})。答案为 ii 后乱选,设 ansians_i 表示答案至少为 ii 的数量。ansi=fi,j×2njans_i=f_{i,j}\times 2^{n-j},差分得答案。

CF666E

s[pl,pr]s[pl,pr]T[l,r]T[l,r] 中哪个串出现次数最多。

tt 建广义 SAM,ss 在上面跑匹配。如果 s[pl,pr]s[pl,pr]tt 中出现,倍增找到 s[pl,pr]s[pl,pr] 对应的节点。每个节点动态开点线段树,下标为 tt 的编号,记录出现次数最大值和下标,线段树合并。

1.14

省选模拟1.14 T2 lis

求子序列最长长度使 lis 比原序列 lis 小。

连边 (i,i,1)(i,i',1)(S,i,inf),fi=1(S,i,inf),f_i=1(i,T,inf),fi=mx(i',T,inf),f_i=mx(i,j,inf),fi+1=fj,i<j,ai<aj(i',j,inf),f_i+1=f_j,i<j,a_i<a_j 跑最小割。模拟最大流。分层,对于点 u,v,fu=fv=i,u<v,au>avu,v,f_u=f_v=i,u<v,a_u>a_vuu 去到 i+1i+1 层的区间 [lu,ru][l_u,r_u] 满足 lulv,rurvl_u\leq l_v,r_u\leq r_v。对于一个流,优先向 lul_u 去,因此不需要退流。记录 visuvis_u 表示是否走过,touto_u 指向下一个 visu=0vis_u=0 的点。O(n)O(n) 模拟。

1.15

CF1498F

树上节点 iiaia_i 个石子,每次选任意个移到 kk 级祖先,不能动输,问以每个点为根先手胜负。

depudep_ukk 相等的分别考虑 SG 值。当 depuk\lfloor \frac{dep_u}{k} \rfloor 为偶数时,uu 没意义。因为先手移偶数位后手可以移回奇数位。设 dpu,j,0/1dp_{u,j,0/1} 表示 depumodk=j,depukmod2=0/1dep_u \bmod k=j,\lfloor \frac{dep_u}{k} \rfloor \bmod 2=0/1 时的 SG 值。换根 dp。

CF1852C

初始全为 00,模 kk 意义下最少多少次区间加 11 得到 aa 数组。

如果不模 kk,差分得 bbans=[bi>0]bians=\sum [b_i>0]b_i。预先对 aa 区间加 kk 代替取模,bu+k,bv+1kb_u+k,b_{v+1}-k,最小化 ansans。反悔贪心,取出最小的 bj<0b_j<0 和当前 bi>0b_i>0 做区间加后 bj>0,bi<0b_j>0,b_i<0,把 bib_i 入队。

CF1539F

中位数相关,考虑 aj>aia_j>a_ijj 设为 11aj<aia_j<a_ijj 设为 1-1,做前缀和。aj=aia_j=a_i 时可以任意排列。

  • ai>amida_i>a_{mid}aj=aia_j=a_ijj 放在 ii 前,设为 1-1ans=max[ajai]l+r2=min(sumrsuml1)12ans=\max \sum [a_j\leq a_i] -\lceil \frac{l+r}{2} \rceil=\frac{-\min (sum_r-sum_{l-1})-1}{2}

  • 否则,aj=aia_j=a_ijj 放在 ii 后,设为 11ans=max[ajai]l+r2=max(sumrsuml1)2ans=\max \sum [a_j\geq a_i] -\lceil \frac{l+r}{2} \rceil=\frac{\max (sum_r-sum_{l-1})}{2}

要动态维护 max(sumrsuml1)\max (sum_r-sum_{l-1})。可以按 aia_i 从小往大加入。初始时 sumi=isum_i=i,当 aia_i 改为 1-1 时,线段树维护区间 [i,n][i,n]22max(sumrsuml1)=maxj=insumjminj=1isumj1\max (sum_r-sum_{l-1})=\max_{j=i}^{n}sum_j-\min_{j=1}^{i}sum_{j-1}

CF1797F

求恰好满足一个条件中的 (u,v)(u,v) 个数:uuu>vu->v 编号最小的点;vvu>vu->v 编号最大的点。

容斥,ans=A+B2Cans=\mid A\mid+\mid B\mid-2\mid C\mid。建大根、小根重构树,A=sizmxu\mid A\mid=\sum sizmx_uCC 为在两棵树都有祖先关系的点对。枚举一边,树状数组维护从根到当前节点在另一颗树上的 dfn 序,区间查询,单点修改。

P4248

ti=s[i,n]t_i=s[i,n]。求 i<jlenti+lentj2×lcp(ti,tj)\sum_{i<j}len_{t_i}+len_{t_j}-2\times lcp(t_i,t_j)

ans=n×(n1)×(n+1)22×i<jlcp(ti,tj)ans=\frac{n\times (n-1)\times (n+1)}{2}-2\times \sum_{i<j} lcp(t_i,t_j)。lcp 看作公共前缀数量。记 sizusiz_u 表示节点 endpos 集合大小,对每个节点计算贡献,有 numu=lenulenfaunum_u=len_u-len_{fa_u} 个串,每个串出现在 sizusiz_u 个后缀的前缀中,贡献 numu×sizu×(sizu1)2num_u\times \frac{siz_u\times (siz_u-1)}{2}

P2178

翻转建 SAM,lcp 转换为最长公共后缀,即 parent tree 上的 lca 的 len。记录子树内最大、次大、最小、次小。

P9970

极小的 mex 区间有 O(n)O(n) 个。枚举 ii 维护所有极小 [l,r],mexl,r=i[l,r],mex_{l,r}=i,不断向左右一边拓展至最近的 aia_i,得到 mexl,r=calc(l,r)>imex_{l',r'}=calc(l',r')>i 的一个区间,所有这些区间包含所有极小区间,每次转移前删去非极小区间。计算区间 mex:可持久化线段树,[1,n][1,n] 为版本,维护每个值最后出现的位置,二分。已知有极小区间 [l,r],mexl,r=x[l,r],mex_{l,r}=x,找到左右的 L,R,aL1=aR+1=xL,R,a_{L-1}=a_{R+1}=x,则 mexl,r=x,Lll,rrRmex_{l',r'}=x,L\leq l'\leq l,r\leq r'\leq R。所有 rl+1,RL+1r-l+1,R-L+1 中的 lenlen 存在 mex=xmex=x,记录加入和删除位置,用 set 扫一遍。

1.16

arc162f

观察发现,第 iiai,j1==ai,jnum=1,(j1<<jnum)a_{i,j_1}=\ldots =a_{i,j_{num}}=1,(j_1<\ldots <j_{num}),则第 ii,(ii>i)ii,(ii>i) 行能取 11 的位置是 [1,j11][1,j_1-1]jj 的一个前缀。

但可以空一些行和列,考虑将所有有 11 的行和列压起来。设 dpi,j,kdp_{i,j,k} 表示前 ii 行,有 jj 个列有过 11,上一行有 kk11,强制连续选。首先可以取一个前缀,dpi,j,k=l=kjdpi1,j,ldp'_{i,j,k}=\sum_{l=k}^j dp_{i-1,j,l},后缀和维护。其次可以向前任意取,但强制连续选,枚举选 ll 个,dpi,j,k=l=0kdpi,jl,kldp_{i,j,k}=\sum_{l=0}^k dp'_{i,j-l,k-l},维护一个斜线的前缀和。ans=(ni)×(mj)×dpi,j,kans=\sum \binom{n}{i}\times \binom{m}{j}\times dp_{i,j,k}。再加上全取 00 的情况。

注意取模优化和枚举时 12\frac{1}{2} 的常数!

1.18

CF814E

分层,只有层间和向下层的边。设当前层 mm 个点,xx 个二度,yy 个三度,层间连 zz 条。

  • 向下层:(x+2yz)!(x+2y-z)!

  • 层间:(x+2y)!(x+2y2z)!×2z×z!\frac{(x+2y)!}{(x+2y-2z)!\times 2^z\times z!},将二度点当两个点,再出去对的相对顺序。

  • 容斥掉 pp 个重边、qq 个自环,设 s=2p+qs=2p+q(1)p+q×y!(ys)!×p!×q!×(x+2y2s)!(x+2y2z)!×2xs×(zs)!\frac{(-1)^{p+q}\times y!}{(y-s)!\times p!\times q!}\times\frac{(x+2y-2s)!}{(x+2y-2z)!\times 2^{x-s}\times (z-s)!}

CF1142E

维护一个可行答案集合,取出两个询问,将不可行的扔掉。要保证每次询问不能问到粉边,要求每个粉连通块只有一个点在集合中。强行当成 DAG,如果不行再将联通块其他点加入。

CF1240F

构造。将边拆为 uuv+nv+n,二分图,如果能使每个点极差不超过 11,合并后不超过 22。设点 uu 度数为 ak+bak+b,拆为 a+1a+1 个点。边染色使所有出边颜色不同。同 CF600F

1.19

arc134e

  • \emptyset 必胜。{1},{2}\{1\},\{2\} 必败。

  • 否则 xmod2=1\exists x\bmod 2=122 必胜。

  • 否则 xmod4=2\exists x\bmod 4=244 必胜。

  • 否则模 33 后如果 S={1}S=\{1\}{2}\{2\} 必胜。

  • 否则 S={4,8}S=\{4,8\} 必败,否则模 1212{4,8}\{4,8\} 必胜。

如果 12x\forall 12\mid x,难以分类讨论。有 20012=16\lfloor \frac{200}{12} \rfloor=16,状压计算出现次数和胜负。

CF487E

圆方树。求出点双,对每个点双建方点,原图点是圆点,方点与对应的圆点连边。

当进入一个点双,一定能到点双中权值最小的点。方点权值为最小的圆点权值,multiset 维护删除,树剖维护路径最小值。

1.20

agc010e

对于不互质的数,后手操作后先后顺序不变。对所有不互质的连边。要求定向后最大拓扑序最小。按权值从小到大 dfs 儿子连边,拓扑时用优先队列。

1.21

P5292

从长为 1122 的回文串开始枚举左右出边 bfs,复杂度 O(m2)O(m^2)。减少无用的边。将 00,1100,1101,1001,10 分开,形成若干连通块。如果连通块为二分图,两点间奇偶性相同,可以反复横跳,取生成树即可。不是二分图,连自环即可。边数将为 O(n)O(n)

1.22

CF1609F

枚举每个颜色 cc,枚举右端,线段树区间维护左端 min 和 max 是否符合条件。

CF1280D

树形 dp。设 dpu,idp_{u,i} 表示 uu 子树内分 jj 段的最大数量。难以记录 uu 所在连通块状态。设 fu,if_{u,i} 表示最大数量下 wibiw_i-b_i 的值。背包 O(n2)O(n^2)

1.23

CF1218A

是基环树。先考虑树。如果从一个点开始,定为根,ans=sizuans=\sum siz_u。换根 dp 即可。

把环找出来,考虑在环上点 uu 的子树中开始染色的答案。染色的方式是大致是从子树的叶子开始向上。对 uu 的每个非环上儿子做树的 dp。记 gug_u 表示从环上进入子树向下染色的答案,dpudp_u 表示换根的、从子树内任意节点开始染色的方案。从环上 uu 的非环上儿子 vv 的子树开始的答案是 dpv+vvgvdp_v+\sum_{v'\neq v} g_{v'}ansu=gv+max(dpvgv)ans_u=\sum g_v+\max (dp_v-g_v)。染完环上 uu 的子树后,绕环染环上点。再从除 uu 外的环上点向下染其他环上点的子树,答案为 gv\sum g_v

发现前后贡献固定,变动的是染环的顺序。染环是染一个区间,每次向左右拓展。每次染一个点,答案加上当前连通块大小,当前连通块大小减 sizusiz_u。贪心向小的染是错的,因为有后效性。记录 sizsiz 的前缀和,区间 dp,O(1)O(1) 向左右转移,滚动即可。

1.24

CF288E

ans=(X×10i+477)(X×10i+744)ans=\sum(X\times 10^i+47\dots7)(X\times10^i+74\dots4)

维护 XX 的数量、和、平方和。

省选模拟1.24 T2 lottop

对于平面图,VE+F=2V-E+F=2,顶点数、边数、平面数。每个面至少围 33 条边,每条边对应两个面,2E3F2E\geq3FE3V6E\leq3V-6。平面图存在点度数小于等于 55,对偶图也是平面图存在点度数小于等于 55,平面图存在环小于等于 55。判三、四元环。

根号分治,按度数、大小定向为 DAG。复杂度 O(mm)O(m\sqrt m)

P7372

连成若干个环,k=lcmaik=lcm a_i。要 ain×m\sum a_i\leq n\times m,取 ai=picia_i=p_i^{c_i}。构造交换相邻的方案。

1.28

P7482

cdq 分治拆成 [l,mid][l,mid](mid,r](mid,r] 的贡献。

对于一个区间计算答案可以用 dp 完成。以 midmid 为交界合并左右的 dp 值。设 fi,0/1f_{i,0/1} 表示区间 [i,mid][i,mid] 或区间 (mid,i](mid,i],是否选 midmidmid+1mid+1 的答案。记跨过 midmid 的贡献为 ww

w=i=lmidj=mid+1rans(i,j)w=\sum_{i=l}^{mid}\sum_{j=mid+1}^{r} ans(i,j)

gi=fi,1fi,0g_i=f_{i,1}-f_{i,0}

w=i=lmidj=mid+1rmax(gi+fi,0+fj,0,gj+fi,0+fj,0)w=\sum_{i=l}^{mid}\sum_{j=mid+1}^{r} \max(g_i+f_{i,0}+f_{j,0},g_j+f_{i,0}+f_{j,0})

w=i=lmidj=mid+1rmax(gi,gj)+i=lmidfi,0×(rmid)+j=mid+1rfj,0×(midl+1)w=\sum_{i=l}^{mid}\sum_{j=mid+1}^{r} \max(g_i,g_j)+\sum_{i=l}^{mid}f_{i,0}\times (r-mid)+\sum_{j=mid+1}^r f_{j,0}\times (mid-l+1)

后面两个直接做,前面的对于每个 ii 拆开 max 计算。

j=mid+1rmax(gi,gj)=j=mid+1r[gigj]×gi+[gi<gj]×gj\sum_{j=mid+1}^{r} \max(g_i,g_j)=\sum_{j=mid+1}^{r}[g_i\geq g_j]\times g_i+[g_i<g_j]\times g_j

(mid,r](mid,r]gjg_j 排序,二分 gig_i 的位置,记录 gjg_j 的后缀和即可。递归 [l,mid][l,mid](mid,r](mid,r] 解决。