摘要:
点分治 跟路径有关的立马想到了点分治 自然我们需要统计每条路径的答案,根据点分治的过程,考虑每条路径,我们希望当前路径上的点作为最小值 那么我们用树状数组保存之前每个最小值对应的最长长度,跑两遍即可 #include<bits/stdc++.h> using namespace std; const 阅读全文
摘要:
dfs 跟上道题很像有木有 同样地,我们暴力枚举约数 根据约数和公式,得出$S=\prod_{i=1}^{n}{(1+p+p^{2}+...+p^{a_{i}})}$ 所以每次我们暴力枚举是哪个约数,次数是多少,然后爆搜 如果剩下的约数和$S-1$是质数,那么说明约数只剩下一个大质数,直接统计答案结 阅读全文
摘要:
搜索 这种$n$很大并且跟约数有关的题都是搜索,因为约数每次除一下大概是$log$级的。 这道题我们希望一个数的约数个数尽量大才能成为反质数,所以涉及的因子不会很多 然后爆搜一发,枚举每个因子用不用,用几次,复杂度很低 #include<bits/stdc++.h> using namespace 阅读全文
摘要:
莫比乌斯反演 根据约数和个数公式 $ans = \sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{x|i}\sum_{y|j}{[gcd(i, j)==1]}$ 交换枚举顺序 $ans = \sum_{x=1}^{n}\sum_{y=1}^{n}{[\frac{n}{x}][\fr 阅读全文
摘要:
单调栈+set+后缀数组 一道奇妙的题 这道题如果对于每个询问$r$是固定的,那么就很简单了,可惜并不是 由于r会变化,那么对于两个子串$[i...r],[j...r]$,他们的大小关系随着r的变化也会变化,使得我们不能直接预处理答案 所以我们把询问离线,把每个询问按照r分类,通过考虑r的变化来完成 阅读全文