1.君と彼女の恋
找出有多少个序列满足,和为n(n<=1e18),每个元素mod m(m<=100)都不同。
结果mod大质数。
我们可以先求出每个元素mod m后,序列得到某个和的方案数。然后可以一直+m达到n。
设f[i][j]表示序列中每个元素mod m后,得到的和为i,并且序列中有j个数,保证这j个数互不相同
for k:=0 to m-1 do
for i:=1 to m do
for j:=i*m downto 1 do
f[j][i]+=f[j-k][k-1]
枚举i,j后,给序列中的任意元素加上若干个m,使得和为n。
首先序列排序有j!,然后设还要加x=(n-i)/m个m,就要给这j个数分配x个m。
那么就是一个隔板问题。
所以i,j的贡献就是$$f[i][j]i!C_{x+i-1}^{i-1}$$
然后C可以递推求。
2.收税
给出m个修改操作和询问操作,和n个办公室。每个办公室在一个修改操作后会有一条直线(起始位置(X,y),斜率)
询问操作问[l,r]的直线与x=X交点的y坐标最大值。保证修改操作和询问操作中的X递增。
n,m<=1e5
容易发现我们可以做到O(1)修改,O(n)查询。
考虑分块,平衡复杂度。
给每个块维护一个单调队列,按斜率排序,表示一个下凸壳。
修改操作就直接暴力重构单调队列。
询问操作就暴力查询每个单调队列,和落单的元素。
3.非整除序列
一张由10^17个结点组成的树,2是根节点。
编号i的父亲为j,其中满足i是1~j-1中任意一个数的倍数,但不是j的倍数。询问区间A~B,算出其中每个节点到根节点的距离和。
j是i的父亲,当且仅当(g[j-1]|i,g[j]!|i),其中(g[i]=lcm(1..i))。
那么处理出g后,发现大于41的父亲都小于41,所以暴力出前41的ans,那么ans[i]=ans[fa[i]]+1,i>41。
枚举父亲i,要求出有多少个数是g[i-1]的倍数,而不是g[i]的倍数,设为h[i]。
由于g[i]是g[i-1]的倍数,所以不是g[i-1]的倍数,则一定不是g[i]的倍数。
4.可修改区间第k大
用树状数组套动态开点的线段树。
然后每颗线段树就独立开来,用树状数组做差分。