bzoj 4556 字符串
后缀数组,暴力硬跑
贼快
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define MAXN 100005
using namespace std;
int buc[MAXN],wa[MAXN],wb[MAXN];
int r[MAXN],sa[MAXN],rank[MAXN],height[MAXN];
void getheight(int n){
int i,j,k=;
for(i=;i<n;i++)rank[sa[i]]=i;
for(i=;i<n;height[rank[i++]]=k)
for(k?k--:,j=sa[rank[i]-];r[i+k]==r[j+k];k++);
return ;
}
bool cmp(int *c,int a,int b,int d)
{return c[a]==c[b]&&c[a+d]==c[b+d];}
void da(int n,int m=){
int i,j,p,*x=wa,*y=wb,*t;
for(i=;i<m;i++)buc[i]=;
for(i=;i<n;i++)buc[x[i]=r[i]]++;
for(i=;i<m;i++)buc[i]+=buc[i-];
for(i=n-;~i;i--)sa[--buc[x[i]]]=i;
for(j=,p=;p<n;j*=,m=p){
for(i=n-j,p=;i<n;i++)y[p++]=i;
for(i=;i<n;i++)if(sa[i]>=j)y[p++]=sa[i]-j;
for(i=;i<m;i++)buc[i]=;
for(i=;i<n;i++)buc[x[y[i]]]++;
for(i=;i<m;i++)buc[i]+=buc[i-];
for(i=n-;~i;i--)sa[--buc[x[y[i]]]]=y[i];
for(t=x,x=y,y=t,p=,x[sa[]]=,i=;i<n;i++)
x[sa[i]]=cmp(y,sa[i-],sa[i],j)?p-:p++;
}
getheight(n);
return ;
}
int n,q;
char s[MAXN];
int main(){
scanf("%d%d",&n,&q);
scanf("%s",s);
for(int i=;i<n;i++)r[i]=s[i];
da(n+);
int ans,minn,pos,now,a,b,c,d;
while(q--){
scanf("%d%d%d%d",&a,&b,&c,&d);
a--;b--;c--;d--;
ans=; minn=min(d-c+,b-a+);
pos=rank[c];
if(sa[pos]>=a&&sa[pos]<=b)ans=max(ans,min(minn,min(b-sa[pos]+,d-c+)));
minn=min(minn,height[pos]);
for(int i=pos-;i>=;i--){
if(minn<=ans)break;
now=sa[i];
if(now>=a&&now<=b)ans=max(ans,min(minn,min(b-sa[i]+,d-c+)));
minn=min(minn,height[i]);
}
minn=min(d-c+,b-a+);
for(int i=pos+;i<=n;i++){
minn=min(minn,height[i]);
if(minn<=ans)break;
now=sa[i];
if(now>=a&&now<=b){ans=max(ans,min(minn,min(b-sa[i]+,d-c+)));}
}
printf("%d\n",ans);
}
return ;
}
bzoj 4556 字符串的更多相关文章
- bzoj 4556 字符串 —— 后缀数组+主席树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4556 就是找一个 rk 在一段区间内的前驱和后继: 由于 LCP 还有区间长度的限制,所以可 ...
- BZOJ 4556 [HEOI2016/TJOI2016]字符串
BZOJ 4556 [HEOI2016/TJOI2016]字符串 其实题解更多是用后缀数组+数据结构的做法,貌似也不好写. 反正才学了 sam 貌似比较简单的做法. 还是得先二分,然后倍增跳到 $ s ...
- Bzoj 4556: [Tjoi2016&Heoi2016]字符串
4556: [Tjoi2016&Heoi2016]字符串 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 177 Solved: 92[Sub ...
- ●BZOJ 4556 [Tjoi2016&Heoi2016]字符串
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4556 题解: 巨恶心...但是题很好呀,可以练习好几个比较麻烦的算法~ 1).预处理 首先用 ...
- BZOJ 4556: [Tjoi2016&Heoi2016]字符串(后缀数组 + 二分答案 + 主席树 + ST表 or 后缀数组 + 暴力)
题意 一个长为 \(n\) 的字符串 \(s\),和 \(m\) 个询问.每次询问有 \(4\) 个参数分别为 \(a,b,c,d\). 要你告诉它 \(s[a...b]\) 中的所有子串 和 \(s ...
- bzoj 4556 [Tjoi2016&Heoi2016]字符串——后缀数组+主席树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4556 本来只要查 ht[ ] 数组上的前驱和后继就行,但有长度的限制.可以二分答案解决!然后 ...
- 【BZOJ 4556】[Tjoi2016&Heoi2016]字符串 SAM+二分+主席树
这道题市面上就两种法:一种是SA+二分+主席树,一种是SAM+二分+主席树(有不少人打线段树合并???)(除此之外还有一种利用炒鸡水的数据的暴力SA,贼快.....)(当时学SA的时候没做这道题,现在 ...
- 【BZOJ 4556】字符串
[链接]h在这里写链接 [题意] 给你一个长度为n(n<=10^5)的字符串以及一个整数m(m<=10^5),代表询问的次数. 每个询问由4个整数a,b,c,d给出 ...
- BZOJ 4556 [Tjoi2016&Heoi2016]字符串 ——后缀数组 ST表 主席树 二分答案
Solution 1: 后缀数组暴力大法好 #include <map> #include <cmath> #include <queue> #include &l ...
随机推荐
- 集群中几种session同步解决方案的比较[转]
集群中session安全和同步是个最大的问题,下面是我收集到的几种session同步的方案,希望能通过分析其各自的优劣找出其适应的场景. 1. 客户端cookie加密 这是我以前采用的方式,简单,高效 ...
- AngularJS数据绑定中数据监控的机制说明
from : http://docs.angularjs.org/guide/scope When the browser calls into JavaScript the code execute ...
- Ocelot中文文档-Raft(实验功能不能用于生产环境)
Ocelot最近整合了Rafty,这是我在去年一直研究的Raft的一个实现. 这个项目实验性非常强,所以在我认为它没问题之前,请不要在生产环境中使用Ocelot的这个功能. Raft是一种分布式一致性 ...
- (转)java之Spring(IOC)注解装配Bean详解
java之Spring(IOC)注解装配Bean详解 在这里我们要详细说明一下利用Annotation-注解来装配Bean. 因为如果你学会了注解,你就再也不愿意去手动配置xml文件了,下面就看看 ...
- springmvc+swagger构建Restful风格文档
本次和大家分享的是java方面的springmvc来构建的webapi接口+swagger文档:上篇文章分享.net的webapi用swagger来构建文档,因为有朋友问了为啥.net有docpage ...
- js 对XML文件的保存与读取
一.保存(在前端用js创建xml格式) function exportToXml(jsonStr){ var obj = eval('('+ jsonStr + ')'); var xmlDoc = ...
- DevOps之二 Maven的安装与配置
CentOS7 安装Maven 一.安装Maven mkdir -p /usr/local/maven3wget http://mirrors.hust.edu.cn/apache/maven/mav ...
- CSS学习笔记3:选择器及优先级
CSS选择器的类型: 标签选择器 类选择器 ID选择器 全局选择器 群组选择器 后代选择器 1.标签选择器: 以HTML的标签作为选择器,凡是选择了一个标签,那么所有这个标签的内容都是用了 ...
- Spring HTTP状态码枚举值对照表
使用Spring时总去查HTTP状态码对应的Spring枚举值的那篇代码,有点不方便,把代码拷贝出来统一替换格式做成了表格,放在这里,方便大家使用.(枚举类为HttpStatus) 枚举值 HTTP状 ...
- 理解Python中的类对象、实例对象、属性、方法
class Animal(object): # 类对象 age = 0 # 公有类属性 __like = None # 私有类属性 def __init__(self): # 魔法方法 self.na ...