https://www.luogu.org/problemnew/show/P3732

Anihc国提高社会生产力水平.落实好以人民为中心的发展思想。决定进行供给侧结构性改革。

为了提高供给品质.你调查了某个产业近来n个时期的供求关系平衡情况.每个时期的情况都用0或1中的一个数字来表示.于是这就是—个长度为n的01字符串S。为了更好的了解这一些数据.你需要解决一些询问.我们令data(l,r)表示:在字符串S中.起始位置在[l,r]之间的这些后缀之中,具有最长公共前缀的两个后缀的最长公共前缀的长度。

对于每一个询问L,R.求sigma(data(i,R))。

由于你其实根本没有时间调查,所以这些数据都是乱编的,即串S中的每一位都是在0和1之间随机产生的。

参考:https://msy.blog.luogu.org/solution-p3732

最后一句话很皮,于是我们思考下发现公共前缀一定很短,连(看)猜(题)带(解)蒙大概是40吧。

于是我们把询问离线,按照$r$排序,从左到右扫一遍$i$,将以$i$为首的40位字符加入到trie树中,以此维护$pos[k]$表示最小的区间$[pos[k],i]$,使得$data(pos[k],i)=k$。

(还是很好维护的,如果不知道怎么维护可以看参考也可以直接看代码。)

为什么我们构造了$pos$数组呢?其实是因为$data$的单调不增性。

由此我们发现$data(pos[k+1]+1,i)$到$data(pos[k],i)$都是$k$。

答案就呼之欲出了。

#include<queue>
#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1e5+;
inline int read(){
int X=,w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
struct node{
int a[],ed;
}tr[N*];
struct data{
int l,r,id;
}d[N];
char s[N];
int n,q,tot,pos[];
ll ans[N];
inline bool cmp(data a,data b){
return a.r<b.r;
}
void insert(int st){
int now=;
for(int i=st;i<=min(n,st+);i++){
int w=s[i]-'';
if(!tr[now].a[w])tr[now].a[w]=++tot;
now=tr[now].a[w];
if(tr[now].ed)
pos[i-st+]=max(pos[i-st+],tr[now].ed-i+st);
tr[now].ed=i;
}
}
int main(){
n=read(),q=read();
scanf("%s",s+);
for(int i=;i<=q;i++){
d[i].l=read(),d[i].r=read();
d[i].id=i;
}
sort(d+,d+q+,cmp);
for(int i=,j=;i<=n;i++){
insert(i);
while(j<=q&&d[j].r==i){
for(int k=;k<=;k++){
if(pos[k]>=d[j].l){
ans[d[j].id]+=(ll)k*(pos[k]-max(pos[k+],d[j].l-));
}else break;
}
j++;
}
}
for(int i=;i<=q;i++)printf("%lld\n",ans[i]);
return ;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

最新文章

  1. 添加Web引用
  2. [OpenCV] Samples 10: imagelist_creator
  3. 关于centos的yum代理设置
  4. 常用js,css文件统一加载方法,并在加载之后调用回调函数
  5. Jquery Data Table插件
  6. linux中压缩与解压缩命令小结
  7. 通过查看mysql 配置参数、状态来优化你的mysql
  8. FileStream操作文件读写
  9. nsfocus-笔试题
  10. AngularJS $compile动态生成html
  11. JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)
  12. Js中的subStr和subString的区别
  13. 云服务器内,nginx安装部署,Xshell,Xftp安装
  14. python之OpenCv(二)---保存图像
  15. udp_connect函数
  16. Python利用PIL生成随机验证码图片
  17. 安装wamp提示You dont&#39;t have permission to accesson on this server的解决方案
  18. java远程工具类
  19. 【LOJ】#2497. 「PA 2017」Banany
  20. sql like参数化查询

热门文章

  1. javascript this(上)
  2. Netty源码分析第7章(编码器和写数据)----&gt;第2节: MessageToByteEncoder
  3. mac 上面安装 tree 命令
  4. php 数组去重
  5. 三维空间中xoy平面上特定抛物线的正等测投影解析解的一种求法
  6. 欢迎来怼--第三十六次Scrum会议
  7. Leetcode题库——27.移除元素
  8. 关于JoptionPane提示框
  9. 索引超出了数组界限。 在 System.Collections.Generic.Dictionary`2.Resize
  10. JAVA自学日记——Part Ⅲ