Day 1
早晨同张黄赵,四人一起前往龙山书院。按陈的路线,先地铁坐一站用了一两分钟,然后走了一公里多花了半小时,大约
9 : 00 9:00 9 : 00 到。这居然是赵第一次坐地铁。领了胸牌,照了合照,然后五人一起逛校园,顺便为
N O I W C NOIWC NO I W C 的宿舍踩点,三个室友都不认识。逛太久了,开幕式没找到位置,只能坐在楼梯上听了一个小时,感觉内容和去年差不多
中午吸取教训,快速到达餐厅。午餐还是相当丰盛的,两荤两素。在报告厅里休息一个小时后,来到棒垒球馆
试机
30 m i n 30min 30 min 。第一题之前做过,想了一会儿才写出来,但是
0 p t s 0pts 0 pt s 。第二题是交互题,看了一下是简单二分,但没有写。剩下时间只写了一份不太正确的
N T T NTT NTT 。休息
10 10 10 分钟时,突然发现没拿笔,来不及取了,只能借了一支
先开了
T 1 T1 T 1 ,从数据范围看初步感觉是数学题或
d p dp d p 题,于是思考了一会儿,只想出了
a > b + 1 a>b+1 a > b + 1 时
5 p t s 5pts 5 pt s 的部分分:答案为
b + 1 b+1 b + 1
之后转向
T 2 T2 T 2 ,一开始看错题,以为是简单三维偏序,写了一部分时发现不对,重新看题。感觉是大
d s ds d s ,只写了
n , m ≤ 10 3 n,m\le10^3 n , m ≤ 1 0 3 的暴力查询祖先然后去重,此时对
10 4 10^4 1 0 4 级已经有大致构想了,但没有写
看了一下
T 3 T3 T 3 ,基本没有想法,于是继续磨
T 1 T1 T 1
题意可以转化选出若干二元组
( x , y ) ( 1 ≤ x < y ≤ a + b ) (x,y)\;(1\le x<y\le a+b) ( x , y ) ( 1 ≤ x < y ≤ a + b ) ,要求对于任意
a a a 个
1 1 1 和
b b b 个
0 0 0 的序列
v 1 ∼ a + b v_{1\sim a+b} v 1 ∼ a + b ,有
or ( x , y ) ( v x ∧ v y ) = 1 \operatorname{or}_{(x,y)} (v_x\land v_y)=1 or ( x , y ) ( v x ∧ v y ) = 1 。当时想到类似之前模拟赛“原始人起洞”那题,从几何上考虑,想了许久想到了一个错的公式,连样例都没过
于是又去看
T 2 T2 T 2 ,做
10 4 10^4 1 0 4 级的一档,一开始想长剖
O ( 1 ) O(1) O ( 1 ) 求
k k k 级祖先,但快写完才想到有更优且更加有优化前途的做法:对
x x x 扫描线,于是快速写完过了
再回来看
T 1 T1 T 1 ,想了相当长时间,只过了
a = 2 a=2 a = 2 的
5 p t s 5pts 5 pt s ,写了一大堆暴力,发现
a , b ≤ 4 a,b\le4 a , b ≤ 4 都跑不了,一度想放弃了,然后想到可以从序列的角度思考,相当于
a + b a+b a + b 个点,选择若干对连无向边,要求从中选出
a a a 个点必有两个为同一边的两端点,要求边数最小。这等价于
a + b a+b a + b 点的无向图,要使最大独立集
≤ a − 1 \le a-1 ≤ a − 1 ,求最小边数。由于前段时间网络流做多了(连做网络流
24 24 24 题),想成二分图了,然后从最大流的方式考虑,发现样例都解释不了。之后想到一个构造方法,样例过了,
a > b + 1 a>b+1 a > b + 1 和
a = 2 a=2 a = 2 的也可以解释,但交了只有
10 p t s 10pts 10 pt s 。于是用暴力程序跑出
a = 3 , b = 4 a=3,b=4 a = 3 , b = 4 ,画出来思考了一会儿,终于想到正解,过的时候已经下午
4 : 07 4:07 4 : 07 了
立刻转到
T 2 T2 T 2 ,想了一会儿下一档没有思路,去思考
T 3 T3 T 3
T 3 T3 T 3 花了一段时间才看懂题,写了
n , m , k ≤ 100 n,m,k\le 100 n , m , k ≤ 100 的
d p dp d p ,尝试卡过
3000 3000 3000 ,没有
T T T 但是
W A WA W A 了,想了半天没找到原因,尝试写出了缩点的
O ( m k ) O(mk) O ( mk ) 做法,但是样例都过不了,此时已经来不及调了
最终
100 + 24 + 10 100+24+10 100 + 24 + 10
出来之后同几人交流,张
100 + 26 + 0 100+26+0 100 + 26 + 0 ,黄
100 + 41 + 0 100+41+0 100 + 41 + 0 ,
c y f cyf cy f 300 300 300 ,诸
100 + 24 + 20 100+24+20 100 + 24 + 20 ,唐
160 + 160+ 160 + ,范和赵
T 1 T1 T 1 都没过
由于晚高峰,回来时还是那条路。出地铁站时,张拿单程票在闸机上刷了四五次,才意识到是插进去,被笑话了许久
a a a 个有电电池,
b b b 个没电电池,每次从中选出两个,求最优策略、最坏情况下,第一次同时取到两个有电电池的最小次数,
a , b ≤ 1000 , a ≥ 2 , b ≥ 1 a,b\le1000,a\ge 2,b\ge 1 a , b ≤ 1000 , a ≥ 2 , b ≥ 1 ,多测
T ≤ 1000 T\le1000 T ≤ 1000
等价于
a + b a+b a + b 个点,选择尽量少的边,使其最大独立集
≤ a − 1 \le a-1 ≤ a − 1
将
a + b a+b a + b 个点划分为
a − 1 a-1 a − 1 个团,显然这样是合法的,考虑最小化总边数
令
A = a + b A=a+b A = a + b ,
B = a − 1 B=a-1 B = a − 1
发现
A m o d B A\bmod B A mod B 个团为
⌊ A B ⌋ + 1 \lfloor\frac AB\rfloor+1 ⌊ B A ⌋ + 1 个点,
B − ( A m o d B ) B-(A\bmod B) B − ( A mod B ) 个团为
⌊ A B ⌋ \lfloor\frac AB\rfloor ⌊ B A ⌋ 个点时最优
赛场上写了单次询问
O ( a ) O(a) O ( a ) 模拟的做法,实际答案为
( A m o d B ) f ( ⌊ A B ⌋ + 1 ) + ( B − ( A m o d B ) ) f ( ⌊ A B ⌋ ) (A\bmod B)f(\lfloor\frac AB\rfloor+1)+(B-(A\bmod B))f(\lfloor\frac AB\rfloor) ( A mod B ) f (⌊ B A ⌋ + 1 ) + ( B − ( A mod B )) f (⌊ B A ⌋) (其中
f ( x ) = x ( x − 1 ) 2 f(x)=\frac{x(x-1)}2 f ( x ) = 2 x ( x − 1 ) ),不难做到
O ( 1 ) O(1) O ( 1 )
给定
n n n 点的树,
m m m 次询问每次给定
l , r , x l,r,x l , r , x ,求
∣ { f a x ( i ) ∣ l ≤ i ≤ r } ∣ |\{fa^x(i)\mid l\le i\le r\}| ∣ { f a x ( i ) ∣ l ≤ i ≤ r } ∣ ,其中
f a x ( i ) fa^x(i) f a x ( i ) 表示
x x x 的第
i i i 级祖先,若不存在则忽略该元素,
n ≤ 10 5 , m ≤ 10 6 , l , r , x ≤ n n\le10^5,m\le10^6,l,r,x\le n n ≤ 1 0 5 , m ≤ 1 0 6 , l , r , x ≤ n
答案可以表示为
∑ u = l r [ d e p u > x ] [ ∀ l ≤ v < u , d e p u = d e p v ( d e p l c a ( u , v ) < d e p u − x ) ] \sum_{u=l}^r[dep_u>x][\forall l\le v<u,dep_u=dep_v(dep_{lca(u,v)}< dep_u-x)] ∑ u = l r [ d e p u > x ] [ ∀ l ≤ v < u , d e p u = d e p v ( d e p l c a ( u , v ) < d e p u − x )]
令
l s x , u ls_{x,u} l s x , u 表示最大的
v v v ,满足
v < u , d e p u = d e p v v<u,dep_u=dep_v v < u , d e p u = d e p v ,且
d e p l c a ( u , v ) ≥ d e p u − x dep_{lca(u,v)}\ge dep_u-x d e p l c a ( u , v ) ≥ d e p u − x ,不存在则为
0 0 0
特殊地,若 d e p u ≤ x dep_u\le x d e p u ≤ x 则 l s x , u = ∞ ls_{x,u}=\infty l s x , u = ∞
则答案为
∑ u [ l ≤ u ≤ r ] [ l s x , u < l ] \sum_u[l\le u\le r][ls_{x,u}<l] ∑ u [ l ≤ u ≤ r ] [ l s x , u < l ] ,为二维数点的形式,可
C D Q CDQ C D Q 分治做
对于每个
u u u ,若
v < u v<u v < u 且
d e p u = d e p v dep_u=dep_v d e p u = d e p v ,则
v v v 对
l s ∗ , u ls_{\ast,u} l s ∗ , u 的影响是令
l s x , u ( x ≥ d e p u − d e p l c a ( u , v ) ) ls_{x,u}\;(x\ge dep_u-dep_{lca(u,v)}) l s x , u ( x ≥ d e p u − d e p l c a ( u , v ) ) 对
v v v 取
max \max max
对于每个深度分别处理。按编号从小到大扫描该深度的所有点,令当前扫到的点为
u u u ,每次令
u u u 到
1 1 1 的链上所有点赋值为
u u u ,则
l s x , u ls_{x,u} l s x , u (在赋值之前计算)等于
x x x 的第
x x x 级父亲的值,
若没有第 x x x 级父亲则为 ∞ \infty ∞
每个数组
l s i , ∗ ls_{i,\ast} l s i , ∗ 中相同的并为一段,通过树链剖分,转化为
O ( n log n ) O(n\log n) O ( n log n ) 次区间赋值,每次将异色两段合并为一段代表
l s ls l s 的一段,可以颜色段均摊做到总段数
O ( n log n ) O(n\log n) O ( n log n )
离线所有询问,转化为
O ( n log n ) O(n\log n) O ( n log n ) 次单点修改和矩形查询,
C D Q CDQ C D Q 分治即可
总时间复杂度
O ( ( n log n + m ) log ( n log n + m ) log n ) = O ( n log 2 n log m + m log n log m ) O((n\log n+m)\log (n\log n+m)\log n)=O(n\log^2 n\log m+m\log n\log m) O (( n log n + m ) log ( n log n + m ) log n ) = O ( n log 2 n log m + m log n log m ) ,因为树剖和树状数组常数小,所以可以过
给定
n n n 点
m m m 边的有向图,点有点权
a i a_i a i 。定义一次对
s s s 和
b 1 ∼ k b_{1\sim k} b 1 ∼ k 进行一次游戏为进行
k k k 轮博弈,一个物体初始在
s s s ,第
i i i 轮中选择一个当前物品所在点可达的点(至少移动一步),满足那个点的点权等于
b i b_i b i ,并将物品移过去。给定
b 1 ∼ k b_{1\sim k} b 1 ∼ k ,对于每个
1 ≤ s ≤ n 1\le s\le n 1 ≤ s ≤ n ,求出最小的
0 ≤ r < k 0\le r<k 0 ≤ r < k ,使得仅取
b r + 1 ∼ k b_{r+1\sim k} b r + 1 ∼ k 进行游戏先手可胜,若不存在则为
− 1 -1 − 1 。
n , k ≤ 10 6 , m ≤ 2.2 × 10 6 n,k\le10^6,m\le2.2\times10^6 n , k ≤ 1 0 6 , m ≤ 2.2 × 1 0 6
令
f i , j f_{i,j} f i , j 表示取
i i i 和
b j ∼ k b_{j\sim k} b j ∼ k 进行游戏先手是否必胜
则
f i , k + 1 = 0 f_{i,k+1}=0 f i , k + 1 = 0 ,令
t o ( x ) to(x) t o ( x ) 为
x x x 的所有可达点,转移为
f i , j = o r u ∈ t o ( i ) [ b j = a u ] ( ¬ f u , j + 1 ) f_{i,j}=\operatorname{\mathop{or}}_{u\in to(i)} [b_j=a_u](\lnot f_{u,j+1}) f i , j = or u ∈ t o ( i ) [ b j = a u ] ( ¬ f u , j + 1 )
直接做时间复杂度
O ( n 2 k ) O(n^2k) O ( n 2 k ) ,可
bitset 优化到
O ( n 2 k ω ) O(\frac{n^2k}\omega) O ( ω n 2 k )
对于同一强连通分量中的
i , j i,j i , j ,对于
1 ≤ s ≤ k 1\le s\le k 1 ≤ s ≤ k 有
f i , s = f j , s f_{i,s}=f_{j,s} f i , s = f j , s
于是对原图进行缩点,每个联通块为单位处理,转移时按照拓扑序递推,可做到
O ( n m ) O(nm) O ( nm )
考虑优化状态设计
令
F i F_i F i 表示最小的
x x x 使得
f u , x = 1 f_{u,x}=1 f u , x = 1 ,其中
u u u 为编号为
i i i 的
S C C SCC SCC 中的节点,容易由其得到答案
将原图
S C C SCC SCC 缩点,在反向图上拓扑排序的同时计算
F F F
初始所有
F i = k + 2 F_i=k+2 F i = k + 2
若当前处理节点
i i i 对应的
S C C SCC SCC 中节点数
> 1 >1 > 1 ,则可以在该
S C C SCC SCC 内部移动若干次
令
m n p s v mnps_v mn p s v 为
v v v 在数组
b b b 中第一次出现的位置
令
m p mp m p 为
m n p s a i mnps_{a_i} mn p s a i 的最小值,其中
i i i 为当前处理
S C C SCC SCC 中的点,其表示
b m p b_{mp} b m p 在当前
S C C SCC SCC 中有对应点
若
m p ≥ F i mp\ge F_i m p ≥ F i 显然没有必要跟新
若
m p = F i − 1 mp=F_i-1 m p = F i − 1 ,则相当于令后手必胜,显然不优,此时也不需要更新
否则显然以当前
S C C SCC SCC 开始,可以从
b m p b_{mp} b m p 开始移动
若从
b m p b_{mp} b m p 开始先手必胜,则
F i ← m p F_i\gets mp F i ← m p ,否则
F i ← m p + 1 F_i\gets mp+1 F i ← m p + 1 ,考虑如何判断
令
c t ct c t 为满足
{ b m p ∼ c t } ⊆ S a \{b_{mp\sim ct}\}\subseteq S_a { b m p ∼ c t } ⊆ S a 的最大值,其中
S a S_a S a 表示当前
S C C SCC SCC 中所有节点的
a a a 构成的集合
若
min ( c t , F i − 1 ) − m p \min(ct,F_i-1)-mp min ( c t , F i − 1 ) − m p 为奇数则先手必胜,否则后手必胜,可分类讨论证明
对于反图上
i i i 的后继节点
v v v ,有
F v ← min ( F v , F i ) F_v\gets \min(F_v,F_i) F v ← min ( F v , F i ) ,因为先手可由
v v v 进入
i i i
当
i i i 对应
S C C SCC SCC 大小为
1 1 1 时,只能在其上停留最多一个
b s b_s b s
若
m n p s a p < F i − 1 mnps_{a_p}<F_i-1 mn p s a p < F i − 1 ,则在点
i i i 从
b m n p s a p b_{mnps_{a_p}} b mn p s a p 开始且
允许第一步可移动 0 0 0 的距离的情况下 (因为题目要求至少移动一步,对于
S C C SCC SCC 大小大于
1 1 1 的可以绕一圈回来,不影响,但是对于
S C C SCC SCC 大小等于
1 1 1 的,其不符合要求,但从
v v v 出发就合法了) 必胜,
F v ← min ( F v , m n p s a p ) F_v\gets \min(F_v,mnps_{a_p}) F v ← min ( F v , mn p s a p )
时间复杂度可以做到
O ( n + m ) O(n+m) O ( n + m ) ,常数极大
Day 2
早上到达学校,两场讲座都是
45 m i n 45min 45 min ,都和
A I AI A I 有关,感觉很有意思
中餐仍然两荤两素。在报告厅休息一会儿后开始下午的考试
昨天试机
T 2 T2 T 2 放交互不是没有原因的,
D a y 2 Day2 D a y 2 T 1 T1 T 1 就是交互。想了一会儿没有思路,于是看了一下
T 2 T2 T 2 。同样没有思路
转到
T 3 T3 T 3 ,先写了
B ≤ 40 , r ≤ 10 6 B\le 40,r\le 10^6 B ≤ 40 , r ≤ 1 0 6 的,然后狄利克雷卷积优化过了
r ≤ 5 × 10 6 r\le 5\times10^6 r ≤ 5 × 1 0 6 的,最后暴力搜索过了
l = r , B ≤ 4 l=r,B\le 4 l = r , B ≤ 4 的一档,总计
44 p t s 44pts 44 pt s
之后转战
T 2 T2 T 2 ,写了一个做法结果
0 p t s 0pts 0 pt s ,想了一会儿成功把自己
h a c k hack ha c k 了。应该想到了
c = 1 c=1 c = 1 的正解,优化了暴力,但没有调出来
由
T 1 T1 T 1 想到了之前做的一题,那题是其弱化版,树换成序列,于是尝试从
T 1 T1 T 1 拿分。思路是先找到相近的两个点,然后由其找到直径的一端,再由其找到直径的另一端。写的过程中想到相当多的特殊情况,不知道如何解决。写了一大段满是
b u g bug b ug 的代码,调了许久,过了所有样例和自己造的数据,但仍然一分未得
大约
4 : 30 4:30 4 : 30 左右又回来调
T 2 T2 T 2 ,
W A WA W A 了几次后回去继续磨
T 1 T1 T 1 ,但一直到结束都没有做出来
最终
0 + 0 + 44 0+0+44 0 + 0 + 44 ,最惨的一次
张第二题拿了七八十,其余一样;范好像只有
30 30 30 多;唐逸然
120 + 120+ 120 + ;其余人大都分数比我高一个数量级
两天都死在
T 1 T1 T 1 上,但愿之后的
N O I W C NOIWC NO I W C 不要再这样了
给定
n n n ,存在一个
n n n 点的树。交互库支持两种操作,操作一为给定
i , j , k i,j,k i , j , k 返回
q u e r y ( i , j , k ) = d i s ( i , j ) + d i s ( i , k ) + d i s ( j , k ) ( i ≠ j ≠ k ) query(i,j,k)=dis(i,j)+dis(i,k)+dis(j,k)\;(i\ne j\ne k) q u ery ( i , j , k ) = d i s ( i , j ) + d i s ( i , k ) + d i s ( j , k ) ( i = j = k ) ,操作二是给定
i , j , k i,j,k i , j , k 返回
i i i 是否在链
j − k j-k j − k 上。前者调用不超过
3 × 10 5 3\times10^5 3 × 1 0 5 ,后者调用不超过
2 2 2 次,求出树的任意一条直径的两端点。
n ≤ 10 5 n\le10^5 n ≤ 1 0 5 ,多测
T ≤ 10 4 T\le10^4 T ≤ 1 0 4 ,
∑ n ≤ 10 6 \sum n\le10^6 ∑ n ≤ 1 0 6 ,
4 s 4s 4 s ,保证
2 × 10 7 2\times10^7 2 × 1 0 7 次操作一和
2 × 10 4 2\times10^4 2 × 1 0 4 次操作二交互库耗时不超过
3 s 3s 3 s
n ≥ 5 n\ge 5 n ≥ 5 时,设
( 5 2 ) \binom 52 ( 2 5 ) 个未知元,分别表示
1 ∼ 5 1\sim 5 1 ∼ 5 中两点的距离,然后
( 5 3 ) \binom 53 ( 3 5 ) 次询问设出
( 5 3 ) \binom 53 ( 3 5 ) 个方程,解出
1 ∼ 5 1\sim 5 1 ∼ 5 两两之间的距离(高斯消元),从而求出前
5 5 5 个点的直径的两端
假设前若干点的直径为
x − y x-y x − y ,
z z z 为一个不等于
x x x 和
y y y 的点,且
x , y , z x,y,z x , y , z 两两之间的距离已知,要加入下一个点
i i i ,则根据直径的性质,加入下一个点后的直径一定为
x − i x-i x − i 或
y − i y-i y − i ,询问
( i , x , y ) (i,x,y) ( i , x , y ) ,
( i , x , z ) (i,x,z) ( i , x , z ) ,
( i , y , z ) (i,y,z) ( i , y , z ) ,可解出
i i i 到
x , y , z x,y,z x , y , z 三点的距离,即
x , y , z , i x,y,z,i x , y , z , i 两两距离已知,更新信息即可
总询问次数为
3 ( n − 5 ) + ( 5 3 ) = 3 n − 5 3(n-5)+\binom 53=3n-5 3 ( n − 5 ) + ( 3 5 ) = 3 n − 5 ,时间复杂度
O ( n ) O(n) O ( n ) ,常数略大
给定
a 1 ∼ n , m , k , c a_{1\sim n},m,k,c a 1 ∼ n , m , k , c ,每次花
1 1 1 的代价令某个
a i a_i a i 减一,或花
c c c 的代价选择一个长为
m m m 的区间,令区间中的数减少,减少总量不超过
k k k ,求令
a a a 全部变为
0 0 0 的最小代价,多测
∑ n ≤ 5 × 10 5 , 1 ≤ a i , k , c ≤ 10 9 , c ≤ k \sum n\le5\times10^5,1\le a_i,k,c\le10^9,c\le k ∑ n ≤ 5 × 1 0 5 , 1 ≤ a i , k , c ≤ 1 0 9 , c ≤ k
显然存在一种最优方案,对于每个操作二的连续段(将操作二修改的区间从左到右排序,若相邻一对有交则并入同一连续段),满足操作二取走了它的一个前缀,剩余部分及所有连续段以外的部分用操作一清除
令
r p i rp_i r p i 表示只用操作二(且每次操作都用尽
k k k 个数),最多能清除
[ i , r p i ) [i,rp_i) [ i , r p i ) ,令
f i f_i f i 表示清除
[ i , n ] [i,n] [ i , n ] 的最小代价,令
S ( l , r ) = ∑ i = max ( l , 1 ) min ( r , n ) a i S(l,r)=\sum_{i=\max(l,1)}^{\min(r,n)}a_i S ( l , r ) = ∑ i = m a x ( l , 1 ) m i n ( r , n ) a i ,令
s s s 为
a a a 的前缀和数组
假定已经求出
r p rp r p ,考虑如何计算
f f f ,显然
f n + 1 = 0 f_{n+1}=0 f n + 1 = 0 ,在
f i f_i f i 处先清除
[ i , r p i ) [i,rp_i) [ i , r p i ) 一定最优,若
r p i = n + 1 rp_i=n+1 r p i = n + 1 则
f i = c ⋅ S ( i , n ) k f_i=c\cdot \frac{S(i,n)}k f i = c ⋅ k S ( i , n ) ,否则已经用了
c ⋅ ⌊ S ( i , r p i + m − 1 ) k ⌋ c\cdot \left\lfloor\frac{S(i,rp_i+m-1)}k\right\rfloor c ⋅ ⌊ k S ( i , r p i + m − 1 ) ⌋ ,此时
[ r p i , r p i + m − 2 ] [rp_i,rp_i+m-2] [ r p i , r p i + m − 2 ] 中还剩下一部分,若使用操作一清除则
f i ← f r p i + 1 + c ⋅ ⌊ S ( i , r p i + m − 1 ) k ⌋ + S ( i , r p i + m − 1 ) m o d k − S ( r p i + 1 , r p i + m − 1 ) f_i\gets f_{rp_i+1}+c\cdot \left\lfloor\frac{S(i,rp_i+m-1)}k\right\rfloor+{S(i,rp_i+m-1)}\bmod k-S(rp_i+1,rp_i+m-1) f i ← f r p i + 1 + c ⋅ ⌊ k S ( i , r p i + m − 1 ) ⌋ + S ( i , r p i + m − 1 ) mod k − S ( r p i + 1 , r p i + m − 1 ) ,否则用一次操作二即可清除,转移为
f i ← f min ( r p i + m , n + 1 ) + c ⋅ ⌊ S ( i , r p i + m − 1 ) k ⌋ + c f_i\gets f_{\min(rp_i+m,n+1)}+c\cdot \left\lfloor\frac{S(i,rp_i+m-1)}k\right\rfloor+c f i ← f m i n ( r p i + m , n + 1 ) + c ⋅ ⌊ k S ( i , r p i + m − 1 ) ⌋ + c
显然
r p i = min t = 1 n { t ∣ S ( i , t + m − 1 ) m o d k > S ( t + 1 , t + m − 1 ) } rp_i=\min_{t=1}^n \{t\mid S(i,t+m-1)\bmod k>S(t+1,t+m-1)\} r p i = min t = 1 n { t ∣ S ( i , t + m − 1 ) mod k > S ( t + 1 , t + m − 1 )} (若不存在符合条件的
t t t 则
r p i = n + 1 rp_i=n+1 r p i = n + 1 )
直接计算为
O ( n 2 ) O(n^2) O ( n 2 ) 的,无法接受
该过程可以替换为先令所有
r p rp r p 赋值为
n + 1 n+1 n + 1 ,然后从
n n n 到
1 1 1 枚举
t t t ,对于所有满足
1 ≤ i ≤ t , S ( i , t + m − 1 ) m o d k > S ( t + 1 , t + m − 1 ) 1\le i\le t,S(i,t+m-1)\bmod k>S(t+1,t+m-1) 1 ≤ i ≤ t , S ( i , t + m − 1 ) mod k > S ( t + 1 , t + m − 1 ) 的
i i i 令
r p i rp_i r p i 赋值为
t t t
而
[ S ( i , t + m − 1 ) m o d k > S ( t + 1 , t + m − 1 ) ] ⟺ [ ( s min ( n , t + m − 1 ) − s i − 1 ) m o d k > s min ( n , t + m − 1 ) − s t ] ⟺ [ ( U − x ) m o d k > S t ] { let S t = s min ( n , t + m − 1 ) − s t , U = s min ( n , t + m − 1 ) m o d k , x = s i − 1 m o d k } \begin{aligned}
&[S(i,t+m-1)\bmod k>S(t+1,t+m-1)]\\
\iff &[(s_{\min(n,t+m-1)}-s_{i-1})\bmod k>s_{\min(n,t+m-1)}-s_t]\\
\iff &[(U-x)\bmod k>St]&\{\text{let}~St=s_{\min(n,t+m-1)}-s_t,U=s_{\min(n,t+m-1)}\bmod k,x=s_{i-1}\bmod k\}\\
\end{aligned} ⟺ ⟺ [ S ( i , t + m − 1 ) mod k > S ( t + 1 , t + m − 1 )] [( s m i n ( n , t + m − 1 ) − s i − 1 ) mod k > s m i n ( n , t + m − 1 ) − s t ] [( U − x ) mod k > St ] { let St = s m i n ( n , t + m − 1 ) − s t , U = s m i n ( n , t + m − 1 ) mod k , x = s i − 1 mod k }
若
S t ≥ k St\ge k St ≥ k 显然对
r p rp r p 无影响,否则显然
− k < U − x < k -k<U-x<k − k < U − x < k ,分类讨论得
[ ( U − x ) m o d k > S t ] ⟺ [ ( U − x < 0 ∧ U − x + k > S t ) ∨ ( U − x ≥ 0 ∧ U − x > S t ) ] ⟺ [ ( U < x < U + k − S t ) ∨ ( x ≤ U ∧ U − S t > x ) ] ⟺ [ U < x < U + k − S t ∨ 0 ≤ x < U − S t ] \begin{aligned}
&[(U-x)\bmod k>St]\\
\iff&[(U-x<0\land U-x+k>St)\lor (U-x\ge 0\land U-x>St)]\\
\iff&[(U<x<U+k-St)\lor (x\le U\land U-St>x)]\\
\iff&[U<x<U+k-St\lor 0\le x<U-St]\\
\end{aligned} ⟺ ⟺ ⟺ [( U − x ) mod k > St ] [( U − x < 0 ∧ U − x + k > St ) ∨ ( U − x ≥ 0 ∧ U − x > St )] [( U < x < U + k − St ) ∨ ( x ≤ U ∧ U − St > x )] [ U < x < U + k − St ∨ 0 ≤ x < U − St ]
相当于有数组
v 0 ∼ k − 1 v_{0\sim k-1} v 0 ∼ k − 1 ,初始全为
n + 1 n+1 n + 1 ,然后将区间
( U , U + k − S t ) (U,U+k-St) ( U , U + k − St ) 和
[ 0 , U − S t ) [0,U-St) [ 0 , U − St ) 赋值为
t t t ,然后令
r p t = v s i − 1 m o d k rp_t=v_{s_{i-1}\bmod k} r p t = v s i − 1 mod k
用
ODT \text{ODT} ODT 维护
v v v 即可
时间复杂度
O ( ∑ n log n ) O(\sum n\log n) O ( ∑ n log n )
初始
x = 1 x=1 x = 1 ,每次
x ← x + 1 x\gets x+1 x ← x + 1 ,或
x ← x − 1 x\gets x-1 x ← x − 1 ,或
x ← x k ( k > 1 ) x\gets xk(k>1) x ← x k ( k > 1 ) ,保持
x x x 全程为正,求对于每个
l ≤ i ≤ r l\le i\le r l ≤ i ≤ r ,在不超过
b b b 步内得到
i i i 的方案数取模,
b ≤ 100 , r − l ≤ 30000 , r ≤ 3 × 10 9 b\le100,r-l\le30000,r\le3\times10^9 b ≤ 100 , r − l ≤ 30000 , r ≤ 3 × 1 0 9
final
预计优异要
400 p t s 400pts 400 pt s 左右,我才
178 178 178 ,
44 % 44\% 44%