二分答案,(具体可见http://blog.csdn.net/neither_nor/article/details/51669114),然后就是判定问题,sa和sam都可以做,用sam写了一下,先用sam建后缀树,然后用主席树维护right集合就好了,每次判断把对应节点倍增到深度为mid的点,然后看一下他的子树里有没有right在对应区间的点就好了。

(前几天用sa写了一下,bz能A,洛谷一直WA,有空重构吧。。。)

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=200010,maxm=4000010;
int a,b,c,d,t,pos[maxn],cnt=1,cur,fa[maxn],ch[maxn][26],dis[maxn],n,m,tot;
char s[maxn];
int add(int c,int p){cur=++cnt;dis[cur]=dis[p]+1;for(;p&&!ch[p][c];p=fa[p])ch[p][c]=cur;if(!p)fa[cur]=1;else{int q=ch[p][c];if(dis[q]==dis[p]+1)fa[cur]=q;else{int nt=++cnt;dis[nt]=dis[p]+1;memcpy(ch[nt],ch[q],sizeof(ch[0]));fa[nt]=fa[q];fa[q]=fa[cur]=nt;for(;p&&ch[p][c]==q;p=fa[p])ch[p][c]=nt;}}return cur;
}
vector<int>tong[maxn];
int root[maxn],siz[maxn],tim,last[maxn*2],pre[maxn*2],other[maxn*2],f[maxn][25],dfn[maxn],from[maxn];
void insert(int x,int y){++t;pre[t]=last[x];last[x]=t;other[t]=y;}
void dfs(int x){siz[x]=1;dfn[x]=++tim;from[tim]=x;for(int i=last[x];i;i=pre[i]){int v=other[i];f[v][0]=x;dfs(v);siz[x]+=siz[v];}
}
int jump(int x,int y){for(int i=20;i>=0;--i){if(dis[f[x][i]]>=y)x=f[x][i];}return x;
}
struct node{int l,r,v;
}tr[maxm];
void build(int pos,int l,int r,int &x){++tot;tr[tot]=tr[x];x=tot;++tr[x].v;if(l==r)return;int mid=l+r>>1;if(pos<=mid)build(pos,l,mid,tr[x].l);else build(pos,mid+1,r,tr[x].r);
}
int qs(int i,int j,int l,int r,int L,int R){if(r<L||l>R||r<l)return 0;if(l>=L&&r<=R)return tr[j].v-tr[i].v;int mid=l+r>>1;return qs(tr[i].l,tr[j].l,l,mid,L,R)+qs(tr[i].r,tr[j].r,mid+1,r,L,R);
}
int pd(int mid){int op=jump(pos[c],mid);return qs(root[dfn[op]-1],root[dfn[op]+siz[op]-1],1,n,a,b-mid+1);
}
int main(){//freopen("data.in","r",stdin);//freopen("data.out","w",stdout);int tmp=1;cin>>n>>m;scanf("%s",s+1);for(int i=n;i>=1;--i){tmp=add(s[i]-'a',tmp);pos[i]=tmp;tong[pos[i]].push_back(i);}for(int i=2;i<=cnt;++i)insert(fa[i],i);dfs(1);for(int j=1;j<=20;++j)for(int i=1;i<=cnt;++i){f[i][j]=f[f[i][j-1]][j-1];}for(int i=1;i<=tim;++i){int siz=tong[from[i]].size();root[i]=root[i-1];for(int j=0;j<siz;++j){build(tong[from[i]][j],1,n,root[i]);}}for(int i=1;i<=m;++i){scanf("%d%d%d%d",&a,&b,&c,&d);int l=1,r=min(d-c+1,b-a+1),ans=0;while(l<=r){int mid=l+r>>1;if(pd(mid))ans=mid,l=mid+1;else r=mid-1;}printf("%d\n",ans);}//fclose(stdin);//fclose(stdout);//system("pause");return 0;
}
/*
50 1
pnzogoobycwczqfrbylxuwkgmnzlekbcakviijcrjahthagkcn
20 47 8 50
*/

转载于:https://www.cnblogs.com/dibaotianxing/p/8393792.html

bzoj4556(sam)相关推荐

  1. 2019.03.01 bzoj2555: SubString(sam+lct)

    传送门 题意简述: 要求在线支持两个操作 (1):在当前字符串的后面插入一个字符串 (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 思路: 考虑用lctlctlct来动态维护samsa ...

  2. 4566: [Haoi2016]找相同字符 SAM

    折腾了好久.不过收获还是很多的.第一次自己去画SAM所建出来fail树.深入体会了这棵树的神奇性质. 当然,我最终靠着自己A掉了.(这是我第一次推SAM的性质(以前都是抄别人的,感觉自己好可耻),不过 ...

  3. BZOJ1396:识别子串(SAM)

    Description Input 一行,一个由小写字母组成的字符串S,长度不超过10^5 Output L行,每行一个整数,第i行的数据表示关于S的第i个元素的最短识别子串有多长. Sample I ...

  4. 【MIT Sam Hopkins教授】如何读论文?How to Read a Paper

    来源:专知 本文多图,建议阅读5分钟MIT Sam Hopkins助理教授为您讲解提供有效阅读论文的工具.

  5. HDU 4333 [SAM WRONG!!!]

    题意:给一个数字,每一次把它的最后一位拿到最前面,一直那样下去,分别求形成的数字小于,等于和大于原来数的个数. SAM上就是走n步 相等好好做啊,但是大于小于不好做啊,用类似弦论的思想也不能处理出怎样 ...

  6. Windows Server入门系列29 Hash加密与SAM数据库

    在对用户账户管理的过程中,一个核心任务是如何管理好用户的密码.如果某个用户使用用户账户和密码成功通过了系统的登录认证,那么他之后执行的所有操作都自动具有该用户的权限,如果这个用户属于管理员组,那么他就 ...

  7. sam格式的结构和意义_BAM/SAM文件格式的一些小知识

    BAM/SAM文件的一些小知识 前言 如果不是在陈老师这读博,然后开始折腾BAM/SAM文件,我估计这辈子都不会了解到这么多东西吧 SAM/BAM简介 Sequence Alignment Map ( ...

  8. hdu 4622 Reincarnation SAM模板题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4622 题意:给定一个长度不超过2000的字符串,之后有Q次区间查询(Q <= 10000),问区 ...

  9. 在计算机上创建一个本地用户账户,在工作组中,默认时每台Windows计算机的( )能够在本地计算机的SAM数据库中创建并管理本地用户账户。...

    在工作组中,默认时每台Windows计算机的( )能够在本地计算机的SAM数据库中创建并管理本地用户账户. 更多相关问题 Working with the foreigners ____ me ___ ...

  10. [BZOJ4556][TJOI2016HEOI2016]字符串(二分答案+后缀数组+RMQ+主席树)

    4556: [Tjoi2016&Heoi2016]字符串 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1360  Solved: 545 ...

最新文章

  1. 如何在 Fedora 上使用 Podman
  2. 给AI一张高清照片,分分钟还你细节满满的3D人体模型,GitHub标星3.6k | 在线可玩...
  3. angular-fullstack test
  4. ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核)
  5. em算法详细例子及推导_outlier analysis 补充——EM算法
  6. python3知识点汇总_35个高级Python知识点总结
  7. Best Cow Line(POJ-3617)
  8. asp.net在IIS7中更改网站的.net framework框架版本
  9. ole object interface 能获取图片吗_常见的闲鱼辅助软件有哪些,你知道吗
  10. python matplot绘图legend_Python matplotlib绘图基本元素
  11. 数据挖掘:模型选择——XGBoost与LightBGM
  12. html转换成pdf后变模糊,使用html2canvas.js和jspdf.js把网页转换成 pdf 不清晰怎么解决...
  13. 租用服务器多开虚拟机,云服务器多开虚拟机
  14. 7-6 输出上三角队形
  15. ASP中Split分割字符串函数的实例用法
  16. Centos配置iptables开放ftp服务
  17. 修仙第一步:凌晨打坐
  18. 华为机试C语言-找到比自己强的人数
  19. 关于谷歌插件开发的了解
  20. shopee引流方式有哪些,商家如何为自己店铺做引流?

热门文章

  1. Mac OS清除图标缓存
  2. 公司对公回单如何补打
  3. web端如何获取笔压 web端获取笔压的js库
  4. PHPExcel浏览器输出Excel2007出错
  5. python练手项目pdf_一个不错的练手项目!
  6. 酷我音乐到设备和驱动器_怎么把腾讯视频图标从电脑设备和驱动器里面删除
  7. 软考信息系统项目管理师考试难度大概是怎样的?
  8. 神秘的蓝屏代码0xc000007e
  9. 战舰少女r魔盒服务器维护,战舰少女r魔盒官方
  10. Unity3d常用快捷键