简单分析,不难得到以下转移——
$$
f_{n}=\begin{cases}1&(n=1)\\B\sum_{i=1}^{n-1}f_{i}f_{n-i}&(n\le k)\\B\sum_{i=1}^{n-1}f_{i}f_{n-i}+(A-B)f_{k}f_{n-k}&(n>k)\end{cases}
$$
(在$n<k$时,该式子即类似于为卡特兰数的递推式)

考虑生成函数,令$F(x)=\sum_{n\ge 1}f_{n}x^{n}$​​,那么即
$$
F(x)=B\cdot F^{2}(x)+(A-B)f_{k}x^{k}F(x)+x
$$
记$C=(A-B)f_{k}$​,代入求根公式即
$$
F(x)=\frac{-(Cx^{k}-1)\pm\sqrt{(Cx^{k}-1)^{2}-4Bx}}{2B}
$$
显然$F(0)=0$,那么代入即得到应取负号

令$Q^{2}(x)=(Cx^{k}-1)^{2}-4Bx$,将上式化简并整理即$Q(x)=1-2BF(x)-Cx^{k}$

将两边同时求导,即$Q'(x)=-2BF'(x)-Ckx^{k-1}$

注意到$2Q'(x)Q^{2}(x)=Q(x)(Q^{2}(x))'$​,将每一项分别代入,两式即分别为
$$
-2\left(2BF'(x)+Ckx^{k-1}\right)\left((Cx^{k}-1)^{2}-4Bx\right)\\\left(1-2BF(x)-Cx^{k}\right)\left(2C^{2}kx^{2k-1}-2Ckx^{k-1}-4B\right)
$$
将两者展开后整理,即
$$
\left(C^{2}kx^{2k-1}-Ckx^{k-1}-2B\right)F(x)-\left(C^{2}x^{2k}-2Cx^{k}-4Bx+1\right)F'(x)+\left(2Ckx^{k}-Cx^{k}+1\right)=0
$$
考虑上式的$n-1$​次项系数并整理,即
$$
f_{n}=\frac{2B(2n-3)f_{n-1}+C(2n-3k)f_{n-k}-C^{2}(n-3k)f_{n-2k}+[n=k+1]C(2k-1)}{n}
$$
为了方便,约定$\forall n\le 0,f_{n}=0$,由此直接递推即可(注意到在$n<k$时不需要$C$)

由此,即可线性预处理出所有$f_{i}$,进而前缀和即可快速查询

总时间复杂度为$o(n+q)$,可以通过

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 10000005
4 #define mod 998244353
5 #define ll long long
6 int t,q,k,A,B,C,l,r,inv[N],f[N],sum[N];
7 int main(){
8 inv[0]=inv[1]=1;
9 for(int i=2;i<N;i++)inv[i]=(ll)(mod-mod/i)*inv[mod%i]%mod;
10 scanf("%d",&t);
11 while (t--){
12 scanf("%d%d%d%d",&q,&k,&A,&B);
13 for(int i=1;i<N;i++){
14 if (i==1)f[1]=1;
15 else{
16 f[i]=2LL*B*(2*i-3)%mod*f[i-1]%mod;
17 if (i>k)f[i]=(f[i]+(ll)C*(2*i-3*k+mod)%mod*f[i-k])%mod;
18 if (i>2*k)f[i]=(f[i]-(ll)C*C%mod*(i-3*k+mod)%mod*f[i-2*k]%mod+mod)%mod;
19 if (i==k+1)f[i]=(f[i]+(ll)C*(2*k-1))%mod;
20 f[i]=(ll)f[i]*inv[i]%mod;
21 }
22 if (i==k)C=(ll)(A-B+mod)*f[i]%mod;
23 }
24 for(int i=1;i<N;i++)sum[i]=(sum[i-1]+(ll)f[i]*f[i])%mod;
25 for(int i=1;i<=q;i++){
26 scanf("%d%d",&l,&r);
27 printf("%d\n",(sum[r]-sum[l-1]+mod)%mod);
28 }
29 }
30 return 0;
31 }

[hdu7085]Pty loves SegmentTree的更多相关文章

  1. [hdu7081]Pty loves book

    建立ac自动机,令$S_{x}$为以根到$x$的路径所构成的字符串以及$L_{x}=|S_{x}|,W_{x}=\sum_{1\le i\le m,t_{i}为S_{x}的后缀}w_{i}$,那么不难 ...

  2. [hdu7082]Pty loves lcm

    先将问题差分,即仅考虑上限$R$(和$L-1$) 注意到$f(x,y)$增长是较快的,对其分类讨论: 1.若$y\ge x+2$,此时满足$f(x,y)\le 10^{18}$的$(x,y)$只有约$ ...

  3. Microsoft Loves Linux

    微软新任CEO纳德拉提出的“Microsoft Loves Linux”,并且微软宣布.NET框架的开源,近期Microsoft不但宣布了Linux平台的SQL Server,还宣布了Microsof ...

  4. 5806 NanoApe Loves Sequence Ⅱ(尺取法)

    传送门 NanoApe Loves Sequence Ⅱ Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/131072 K ...

  5. 5805 NanoApe Loves Sequence(想法题)

    传送门 NanoApe Loves Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/131072 K ( ...

  6. CF444C. DZY Loves Colors[线段树 区间]

    C. DZY Loves Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  7. Codeforces444C DZY Loves Colors(线段树)

    题目 Source http://codeforces.com/problemset/problem/444/C Description DZY loves colors, and he enjoys ...

  8. CodeForces445A DZY Loves Chessboard

    A. DZY Loves Chessboard time limit per test 1 second memory limit per test 256 megabytes input stand ...

  9. BestCoder Round #90 A.Kblack loves flag(随机数生成种子)

    A.Kblack loves flag [题目链接]A.Kblack loves flag [题目类型]水题 &题意: kblack喜欢旗帜(flag),他的口袋里有无穷无尽的旗帜. 某天,k ...

随机推荐

  1. Java(43)JDK新特性之方法引用

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228461.html 博客主页:https://www.cnblogs.com/testero ...

  2. nginx搭建网站踩坑经历

    为了更好的阅读体验,请访问我的个人博客 前言 早上刷抖音刷到一个只需要三步的nginx搭建教程(视频地址),觉得有些离谱,跟着复现了一遍,果然很多地方不严谨并且省略了大量步骤,对于很多不了解linux ...

  3. 巧用 CSS3 filter(滤镜) 属性

    原文链接:CSS3 filter(滤镜) 属性 效果预览 filter: grayscale(100%); 定义和使用 filter 属性定义了元素(通常是<img>)的可视效果(例如:模 ...

  4. JDBC:(java database Connection) java数据库连接。

    JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. JDBC连接步骤: 1.先导入jar包,把jar放入到工程下并 ...

  5. kivy布局(一)

    # import kivy from kivy.app import App # 导入应用 from kivy.uix.label import Label # 导入标签 from kivy.uix. ...

  6. 8.18考试总结[NOIP模拟43]

    又挂了$80$ 好气哦,但要保持优雅.(草 T1 地衣体 小小的贪心:每次肯定从深度较小的点向深度较大的点转移更优. 模拟一下,把边按链接点的子树最大深度排序,发现实际上只有上一个遍历到的点是对当前考 ...

  7. boost编译中的细节问题

    原文链接 http://www.cppblog.com/Robertxiao/archive/2013/01/06/197022.html 生成文件命名规则:boost中有许多库,有的库需要编译.而有 ...

  8. 色彩滤镜矩阵(Color Filter Array)

    数码相机上的每个象素都带有一个光感应器,用以测量光线的明亮程度.由于光电二极管是只支持单颜色的装置,它不能区别不同波长的光线.因此,数码相机工程师在相机感应器的上部装上了一套镶嵌式的颜色滤镜,一个颜色 ...

  9. 单片机I/O口推挽与开漏输出详解(力荐)

    推挽输出:可以输出高,低电平,连接数字器件;推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止. 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电 ...

  10. Linux多线程编程之详细分析

    线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步.互斥,这些东西将在本文中介绍.我见到这样一道面试题: 是否熟悉POSIX多线程 ...