T1
题目大意
求(sum_{i=1}^nsum_{j=1}^nmu(gcd(i,j))\%998244253,nle 10^{10})
sol
[sum_{i=1}^nsum_{j=1}^nmu(gcd(i,j))\
=sum_{k=1}^nsum_{i=1}^nsum_{j=1}^nmu(k)[gcd(i,j)=k]\
=sum_{k=1}^nmu(k)sum_{i=1}^{lfloorfrac{n}{k}
floor}sum_{j=1}^{lfloorfrac{n}{k}
floor}[gcd(i,j)=1]\
=sum_{k=1}^nmu(k)sum_{i=1}^{lfloorfrac{n}{k}
floor}sum_{j=1}^{lfloorfrac{n}{k}
floor}sum_{d|i&d|j}mu(d)\
=sum_{k=1}^nmu(k)sum_{d=1}^{lfloorfrac{n}{k}
floor}mu(d)sum_{i=1}^{lfloorfrac{n}{kd}
floor}sum_{j=1}^{lfloorfrac{n}{kd}
floor}\
令sum(x)=sum_{i=1}^n1\
则原式=sum_{k=1}^nmu(k)sum_{d=1}^{lfloorfrac{n}{k}
floor}mu(d)sum({lfloorfrac{n}{kd}
floor})^2\
考虑枚举k imes d\
原式=sum_{T=1}^nsum_{d|T}mu(d)mu(frac{T}{d})sum({lfloorfrac{n}{kd}
floor})^2\
令f(x)=sum_{i|x}mu(i)mu(frac{x}{i})=(mu*mu)\
原式=sum_{T=1}^nf(T)sum(lfloorfrac{n}{T}
floor)^2
]
后面明显可以整除分块,问题变成了如何快速求(f(x))的前缀和,题解说可以用杜教筛,可我就是不会筛((mu*mu)),只写出了线筛的分。
T2
题目大意
给定一个只包含小写字母的字符串 , 求其本质不同的子序列的个数,(len le 10^6,ans)对(998244353)取模。
sol
我当时想了一个用tire树维护有多少个子序列,很明显方案数爆炸。
其实正解不需要任何数据结构,十分简单。
考虑递推,设f[i]为前i个字母组成的本质不同的子序列的个数。(f[i]=2f[i-1])。但这会有很多重复的,设(s_i)为第i个字母,我们还需减去之前以(s_i)结尾的子序列的个数,这些都被重复算了一次。以(s_i)结尾的子序列的个数也可以递推,+=f[i]-f[i-1]就行,因为多产生了这么多贡献。
T3
题目大意
请你维护一个初始为空的点的集合,支持以下操作:
- A x y 加入点 (x,y)
- Q l r x y 询问点 (x,y) 与第 l 个 r 到个点的匹配度的最大值
点 (x,y) 与 (a,b) 的匹配度为 ax+by
sol
我只写了暴力。
正解把这个问题转为了几何问题,设 ax+by=k ,则 (-frac{x}{y}a+frac{k}{y}=b),问题变成了给一个斜率固定的直线,过区间内的一些点使截距最小。然后变成了我不会的线段树维护凸壳。