传送门

毒瘤出题人,卡我常数

如果后缀排序后将两两之间height\(\ge k\)的后缀放在一组,那么每次询问的答案就是\(\sum_{i} \binom{num[i]}{2}\)(num[i]是第i组后缀在[l,r]之间的后缀个数),这个就是小z的袜子.不过注意块大小要开成\(\frac{n}{\sqrt{m}}\),然后求sa[i]和height[i]可以建出后缀树然后贪心遍历整棵树得到

莫队奇偶快排序比普通的慢

// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define LL long long
#define il inline
#define re register
#define db double using namespace std;
const int N=3e6+10,M=1e5+10;
il int rd()
{
int x=0,w=1;char ch=0;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int n,m,kk,szz;
int xzz[26]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,3,4,0,0,0,5,6},fa[N<<1],ch[N<<1][7],len[N<<1],id[N<<1],sa[N],tps,ls=1,tt=1;
char cc[N];
il void inst(char cc,int ii)
{
int np=++tt,p=ls;
len[np]=len[p]+1,id[np]=ii,ls=np;
while(p&&!ch[p][xzz[cc-'a']]) ch[p][xzz[cc-'a']]=np,p=fa[p];
if(!p) fa[np]=1;
else
{
int q=ch[p][xzz[cc-'a']];
if(len[q]==len[p]+1) fa[np]=q;
else
{
int nq=++tt;
fa[nq]=fa[q],len[nq]=len[p]+1,fa[q]=fa[np]=nq;
for(int i=0;i<7;++i) ch[nq][i]=ch[q][i];
while(p&&ch[p][xzz[cc-'a']]==q) ch[p][xzz[cc-'a']]=nq,p=fa[p];
}
}
}
int to[N<<1],nt[N<<1],hd[N<<1],tot;
il void add(int x,int y){++tot,to[tot]=y,nt[tot]=hd[x],hd[x]=tot;}
int ff[N<<1],he[N];
il int findf(int x){return ff[x]==x?x:ff[x]=findf(ff[x]);}
void dd(int x)
{
if(id[x]) ++tps,sa[tps]=id[x],he[tps]=len[findf(ls)],ls=x;
for(int i=hd[x];i;i=nt[i]) dd(to[i]);
ff[x]=fa[x];
}
int be[N],p,mm[N],nm[N];
LL na,an[M];
il void ad(int i){na+=nm[be[i]],++nm[be[i]];}
il void dl(int i){--nm[be[i]],na-=nm[be[i]];}
struct qu
{
int l,r,i;
bool operator < (const qu &bb) const {return mm[l]!=mm[bb.l]?l<bb.l:/*((mm[l]&1)?r>bb.r:*/r<bb.r/*)*/;}
}qq[M]; int main()
{
n=rd(),m=rd(),kk=rd();
szz=n/sqrt(m);
scanf("%s",cc+1);
for(int i=1;i<=n;++i) inst(cc[n-i+1],n-i+1);
for(int i=1;i<=tt;++i) add(fa[i],i),ff[i]=i;
ls=0,dd(1);
for(int i=1;i<=n;++i) be[sa[i]]=p+=he[i]<kk,mm[i]=i/szz;
for(int i=1;i<=m;++i) qq[i].l=rd(),qq[i].r=rd(),qq[i].i=i;
sort(qq+1,qq+m+1);
for(int i=1,l=1,r=0;i<=m;++i)
{
while(r<qq[i].r) ++r,ad(r);
while(r>qq[i].r) dl(r),--r;
while(l<qq[i].l) dl(l),++l;
while(l>qq[i].l) --l,ad(l);
an[qq[i].i]=na;
}
for(int i=1;i<=m;++i) printf("%lld\n",an[i]);
return 0;
}

upd:这个代码里面的求sa和height是假的虽然能过

到时再补

luogu P5112 FZOUTSY的更多相关文章

  1. 洛谷P5112 FZOUTSY

    卡map还行.....手写hash表即可. 我一开始以为这个k会变......在sam上想各种奇技淫巧. k不变就是问一段区间有多少对长度为k的子串相同. 然后hash把子串转化为数字,就是区间有多少 ...

  2. P5112 FZOUTSY

    传送门 没想到这题还这能用莫队--本来看看以为复杂度会挂的-- 预处理出每个字母开头往后\(k\)个的字符串的哈希值,然后大概就是那道小z的袜子了 而且据说这题的哈希得用自然溢出 //minamoto ...

  3. Luogu 魔法学院杯-第二弹(萌新的第一法blog)

    虽然有点久远  还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题  沉迷游戏,伤感情 #include <queue> ...

  4. luogu p1268 树的重量——构造,真正考验编程能力

    题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...

  5. [luogu P2170] 选学霸(并查集+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2170 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一 ...

  6. [luogu P2647] 最大收益(贪心+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...

  7. Luogu 考前模拟Round. 1

    A.情书 题目:http://www.luogu.org/problem/show?pid=2264 赛中:sb题,直接暴力匹配就行了,注意一下读入和最后一句话的分句 赛后:卧槽 怎么只有40 B.小 ...

  8. luogu P2580 于是他错误的点名开始了

    luogu  P2580 于是他错误的点名开始了 https://www.luogu.org/problem/show?pid=2580 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边 ...

  9. CJOJ 1331 【HNOI2011】数学作业 / Luogu 3216 【HNOI2011】数学作业 / HYSBZ 2326 数学作业(递推,矩阵)

    CJOJ 1331 [HNOI2011]数学作业 / Luogu 3216 [HNOI2011]数学作业 / HYSBZ 2326 数学作业(递推,矩阵) Description 小 C 数学成绩优异 ...

随机推荐

  1. 【CF375D】Tree and Queries

    题目大意:给定一棵 N 个节点的有根树,1 号节点为根节点,每个节点有一个颜色.有 M 个询问,每次询问以 i 为根的子树中颜色大于等于 K 的有多少种. 题解:子树询问直接 dfs 序转化成序列问题 ...

  2. C# 中Web.config文件的读取与写入

    asp.net2.0新添加了对web.config直接操作的功能.开发的时候有可能用到在web.config里设置配置文件,其实是可以通过程序来设置这些配置节的. asp.net2.0需要添加引用: ...

  3. 跟我一起写一个hello-world react组件并发布到npm

    第一步:初始化我们的配置 $ mkdir react-hello-world $ cd react-hello-world/ $ npm init -y 修改我们的package.json文件 //p ...

  4. django 配置media 存放调用 图片、图标等文件

    一.需求分析: 一般在网站开发中,有很多类似于用户头像.用户上传的文件,这些经常要改变的媒体文件,需要有一个地方存放,于是就需要media目录,起到跟static类似的功能. 二.在settings. ...

  5. 2019阿里校招测评题,光明小学完全图最短路径问题(python实现)

    题目:光明小学的小朋友们要举行一年一度的接力跑大赛了,但是小朋友们却遇到了一个难题:设计接力跑大赛的线路,你能帮助他们完成这项工作么?光明小学可以抽象成一张有N个节点的图,每两点间都有一条道路相连.光 ...

  6. HTML学习笔记Day11

    一.CSS文档统筹 (一)网页自身的优化 (二)CSS规范 1.命名方法(语义化命名,结构化命名) ID:结构化    header footer class: .border0    . red:  ...

  7. ansible小结常用模块

    根据官方的分类,将模块按功能分类为:云模块.命令模块.数据库模块.文件模块.资产模块.消息模块.监控模块.网络模块.通知模块.包管理模块.源码控制模块.系统模块.单元模块.web设施模块.window ...

  8. springboot定时任务处理

    定时任务是一种很常见的应用场景,springboot中的定时任务完全用的spring的那一套,用起来比较简单,需要注意的是线程池配置的那一块 使用 @EnableScheduling 注解就可以开启定 ...

  9. passat QA / error code 20190210

    s 帕萨特B5 技术资料下载 https://pan.baidu.com/s/1KXYly7eGDUSI5QiLcz8fiQ 提取码: 1i7u 星期日,10,二月,2019,17:16:16:317 ...

  10. JAVA-Enum 枚举

    [参考]枚举类名建议带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开. 说明:枚举其实就是特殊的类,域成员均为常量,且构造方法被默认强制是私有. 正例:枚举名字为 ProcessSta ...