首页 > 学院 > 开发设计 > 正文

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

2019-11-08 02:51:00
字体:
来源:转载
供稿:网友

问题描述 Description

我们知道,哈希(hash)算法被广泛应用于字符串处理领域之中。现有如下哈希函数: f(s,l,r)=∏i−lrord(si)modp 公式中,ord代表的是字符的ascii码,mod代表的是求余操作,则是求积操作,意为求lr之间所有字符的积。 现在给定一个长度为N的字符串,并给出p,之后会有若干组询问,每次询问这个字符串相对于那个区间的子串的哈希值。

输入 Input

输入文件包括若干行,其中第一行是一个字符串 ,数据保证其中只会出现小写英文字母。 第二行是一个整数p。 第三行是一个整数m,表示询问的次数。 接下来的m行,每行有两个整数l,r(1≤l≤r≤n),表示询问从第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%的数据,1≤N≤100,1≤m≤10; 对于70%的数据,1≤N≤105,1≤m≤104; 对于100%的数据,1≤N≤105,1≤m≤105。 Time Limit : 1s & Memory Limit : 128MB

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表