[省选] [线段树] [HLOI2016] 字符串问题

来源:互联网 发布:学英语软件 编辑:程序博客网 时间:2024/05/22 13:55

问题描述 Description

我们知道,哈希(hash)算法被广泛应用于字符串处理领域之中。现有如下哈希函数:

f(s,l,r)=i=lrord(si)modp
公式中,ord代表的是字符的ascii码,mod代表的是求余操作,则是求积操作,意为求lr之间所有字符的积。
现在给定一个长度为N的字符串,并给出p,之后会有若干组询问,每次询问这个字符串相对于那个区间的子串的哈希值。

输入 Input

输入文件包括若干行,其中第一行是一个字符串 ,数据保证其中只会出现小写英文字母。
第二行是一个整数p
第三行是一个整数m,表示询问的次数。
接下来的m行,每行有两个整数l,r(1lrn),表示询问从第l位到第r位的哈希值。

输出 Output

输出文件包括m行,依次给出输入文件中相应的询问对应的答案.

样例输入 Sample Input

efqzvcowdormnslhjzznubn
56
4
17 18
7 20
14 16
15 23

样例输出 Sample Output

52
0
40
0

限制 Limits

对于30%的数据,1N1001m10
对于70%的数据,1N1051m104
对于100%的数据,1N1051m105
Time Limit : 1s & Memory Limit : 128MB

黑历史题,只有查询的线段树
Code
只有查询?先求前缀积,再求个逆元,搞一搞就好了……
但是并不知道p有多大,题中也没说,题解说可以写也是一种优化方法吧。
时间O(nlog2n+Tlog2n)

0 0
原创粉丝点击