试题描述

输入一个字符串S,回答Q次问题,给你l,r,输出从Sl--Sr组成的串在S中出现了多少次。

输入
第一行为一个字符串S。
第二行为一个正整数Q。
接下来Q行每行为l,r。
输出
对于每个询问,输出答案。
输入示例
ababaaabab
5
1 1
2 3
2 2
2 4
1 4
输出示例
6
3
4
2
2
其他说明
1<=l<=r<=|S|<=100000
1<=Q<=1000000
保证S由26个小写字母组成
 

考虑用后缀自动机来水此题

复习一下SAM,每个结束态S的祖先与S构成了S最长串的所有后缀。

SAM的每个节点表示的串长度在(l[fa[x]],l[x]]之间,因此我们可以倍增来求最上方符合条件的节点,预处理每个节点end-set集的大小,就可以O((|S|+Q)logn)解决此题了

#include<cstdio>
#include<cctype>
#include<queue>
#include<cstring>
#include<algorithm>
#define rep(s,t) for(int i=s;i<=t;i++)
#define ren for(int i=first[x];i;i=next[i])
using namespace std;
inline int read() {
int x=,f=;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
for(;isdigit(c);c=getchar()) x=x*+c-'';
return x*f;
}
const int maxn=;
int n,od[maxn],x[maxn],f[maxn];
int to[maxn][],fa[maxn],l[maxn],pos[maxn],cnt=,last=;
void extend(int c,int id) {
int p=last,q,np,nq;
l[pos[id]=last=np=++cnt]=l[p]+;f[np]=;
for(;!to[p][c];p=fa[p]) to[p][c]=np;
if(!p) fa[np]=;
else {
q=to[p][c];
if(l[p]+==l[q]) fa[np]=q;
else {
l[nq=++cnt]=l[p]+;
memcpy(to[nq],to[q],sizeof(to[q]));
fa[nq]=fa[q];
fa[q]=fa[np]=nq;
for(;to[p][c]==q;p=fa[p]) to[p][c]=nq;
}
}
}
int first[maxn],next[maxn],To[maxn],e;
void AddEdge(int u,int v) {
To[++e]=v;next[e]=first[u];first[u]=e;
}
int anc[maxn][];
void dfs(int x) {
anc[x][]=fa[x];
rep(,) anc[x][i]=anc[anc[x][i-]][i-];
ren dfs(To[i]);
}
void init() {
rep(,cnt) AddEdge(fa[i],i);
dfs();
rep(,cnt) x[l[i]]++;
rep(,n) x[i]+=x[i-];
rep(,cnt) od[x[l[i]]--]=i;
for(int i=cnt;i;i--) f[fa[od[i]]]+=f[od[i]];
}
int solve(int L,int R) {
int p=pos[R];
for(int i=;i>=;i--) if(R-L+<=l[anc[p][i]]) p=anc[p][i];
return f[p];
}
char s[maxn];
int main() {
scanf("%s",s);n=strlen(s);
rep(,n-) extend(s[i]-'a',i+);
init();
int m=read();
while(m--) {
int l=read(),r=read();
printf("%d\n",solve(l,r));
}
return ;
}

COJ976 WZJ的数据结构(负二十四)的更多相关文章

  1. COJ966 WZJ的数据结构(负三十四)

    WZJ的数据结构(负三十四) 难度级别:C: 运行时间限制:20000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给一棵n个节点的树,请对于形如"u  ...

  2. Bootstrap<基础二十四> 缩略图

    Bootstrap 缩略图.大多数站点都需要在网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap 创建缩略图的步骤如下: 在图像周围添加带有 ...

  3. 二十四、Struts2中的UI标签

    二十四.Struts2中的UI标签 Struts2中UI标签的优势: 数据回显 页面布局和排版(Freemark),struts2提供了一些常用的排版(主题:xhtml默认 simple ajax) ...

  4. WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的?

    原文:WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的? 服务端只有抛出FaultException异常才能被正常地序列化成Fault消息,并实现向客户 ...

  5. VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机

    VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机 VMwareView手动池可以管理物理计算机 说明: 环境基于实验二十三 1.准备一台Windows 7的物理计算机名 ...

  6. Bootstrap入门(二十四)data属性

    Bootstrap入门(二十四)data属性 你可以仅仅通过 data 属性 API 就能使用所有的 Bootstrap 插件,无需写一行 JavaScript 代码.这是 Bootstrap 中的一 ...

  7. 3360: [Usaco2004 Jan]算二十四

    3360: [Usaco2004 Jan]算二十四 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 6  Solved: 6[Submit][Statu ...

  8. JAVA之旅(二十四)——I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习

    JAVA之旅(二十四)--I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习 JAVA之旅林林总总也是写了二十多篇了,我们今天终于是接触到了I/O了 ...

  9. 二十四. Python基础(24)--封装

    二十四. Python基础(24)--封装 ● 知识结构   ● 类属性和__slots__属性 class Student(object):     grade = 3 # 也可以写在__slots ...

随机推荐

  1. HDOJ 1203 I NEED A OFFER!(01背包)

    10397507 2014-03-25 23:30:21 Accepted 1203 0MS 480K 428 B C++ 泽泽 题目链接:http://acm.hdu.edu.cn/showprob ...

  2. top对僵尸进程的处理

    ps        --forest        ASCII art process tree 2 怎样来清除僵尸进程:    1.改写父进程,在子进程死后要为它收尸.具体做法是接管SIGCHLD信 ...

  3. Fast Power

    Calculate the a^n % b where a, b and n are all 32bit integers. Example For 2^31 % 3 = 2 For 100^1000 ...

  4. 64. 海明距离(Hamming Distance)

    [本文链接] http://www.cnblogs.com/hellogiser/p/hamming-distance.html [介绍] 在信息领域,两个长度相等的字符串的海明距离是在相同位置上不同 ...

  5. 16.O(logn)求Fibonacci数列[Fibonacci]

    [题目] log(n)时间Fib(n),本质log(n)求a^n. [代码]  C++ Code  12345678910111213141516171819202122232425262728293 ...

  6. Java for LeetCode 058 Length of Last Word

    Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...

  7. MST:Conscription(POJ 3723)

      男女搭配,干活不累 题目大意:需要招募女兵和男兵,每一个人都的需要花费1W元的招募费用,但是如果有一些人之间有亲密的关系,那么就会减少一定的价钱,如果给出1~9999的人之间的亲密关系,现在要你求 ...

  8. iOS两个框架之间的类型转换--"桥接"技术

    话不多说,直接举例说明吧.场景模拟:需要开发一个通讯录相关功能,实现访问以及添加等等.这时,需要使用的框架是Core Foundation.而此框架使用的是C语言,例如:CFArrayRef,CFSt ...

  9. Servlet、JSP选择题(2)

    Java EE软件工程师认证考试 试题库-选择题 一.    选择题(包括单选和双选) 1.B 编写一个Filter,需要(  ) A. 继承Filter 类 B. 实现Filter 接口 C. 继承 ...

  10. plsql查询数据显示为乱码解决方法

    使用plsql查询数据显示为乱码: 查看数据库编码: 通过网上搜索,发现需要设置环境变量,添加以下环境变量: LANG=zh_CN.GBK NLS_LANG="SIMPLIFIED CHIN ...