P5112 FZOUTSY
没想到这题还这能用莫队……本来看看以为复杂度会挂的……
预处理出每个字母开头往后\(k\)个的字符串的哈希值,然后大概就是那道小z的袜子了
而且据说这题的哈希得用自然溢出
//minamoto
#include<bits/stdc++.h>
#define R register
#define ll unsigned long long
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=3e6+5,Base=233;
int n,m,cnt[N],rt[N],k,q,S,l,r,tot;char s[N];ll bin[N],a[N],b[N],sum[N],ans[N],res;
struct node{
	int l,r,id;
	inline bool operator <(const node &b)const
	{return rt[l]==rt[b.l]?rt[l]&1?r<b.r:r>b.r:l<b.l;}
}qq[100005];
inline void add(R int x){res+=cnt[a[x]],++cnt[a[x]];}
inline void del(R int x){--cnt[a[x]],res-=cnt[a[x]];}
int main(){
//	freopen("testdata.in","r",stdin);
	scanf("%d%d%d",&n,&q,&k),S=n/sqrt(q);if(S==0)S=1;
	scanf("%s",s+1);
	bin[0]=1;fp(i,1,n)bin[i]=bin[i-1]*Base,sum[i]=sum[i-1]*Base+s[i]-'a',rt[i]=(i-1)/S+1;
	n=n-k+1;
	fp(i,1,n)b[i]=a[i]=sum[i+k-1]-bin[k]*sum[i-1];
	sort(b+1,b+1+n),m=unique(b+1,b+1+n)-b-1;
	fp(i,1,n)a[i]=lower_bound(b+1,b+1+m,a[i])-b;
	fp(i,1,q){
		scanf("%d%d",&l,&r);
		if(l<=n){
			if(r>n)r=n;
			++tot,qq[tot].l=l,qq[tot].r=r,qq[tot].id=i;
		}
	}sort(qq+1,qq+1+tot);
	res=0,l=1,r=0;
	fp(i,1,tot){
		while(l>qq[i].l)add(--l);
		while(r<qq[i].r)add(++r);
		while(l<qq[i].l)del(l++);
		while(r>qq[i].r)del(r--);
		ans[qq[i].id]=res;
	}fp(i,1,q)printf("%lld\n",ans[i]);return 0;
}
												
											P5112 FZOUTSY的更多相关文章
- 洛谷P5112 FZOUTSY
		
卡map还行.....手写hash表即可. 我一开始以为这个k会变......在sam上想各种奇技淫巧. k不变就是问一段区间有多少对长度为k的子串相同. 然后hash把子串转化为数字,就是区间有多少 ...
 - luogu P5112 FZOUTSY
		
传送门 毒瘤出题人,卡我常数 如果后缀排序后将两两之间height\(\ge k\)的后缀放在一组,那么每次询问的答案就是\(\sum_{i} \binom{num[i]}{2}\)(num[i]是第 ...
 - 【LGP5112】FZOUTSY
		
题目 如果是\(hash\)做法的话显然就是把每一个位置后面的\(k\)个位置的hash值拿出来做一个莫队板子就好了 考虑一下牛逼的\(SAM\) 我们完全可以构造出来一棵后缀树,对于每个点找到其祖先 ...
 
随机推荐
- Arcgis Engine(ae)接口详解(5):IGeometry几何基础操作
			
//点操作~~~~~~~~~~~~~~~~~~~~~~~~~ //通过坐标生成点 IPoint point = new PointClass(); point.PutCoords(, ); //获取点 ...
 - VS2005断点失效的问题
			
VS2005下使用VC,部分断点无效,显示『当前不会命中断点.还没有为该文档加载任何符号』. 试过以下一些方法: 1.无效断点所在的项目和启动项目的设置:项目->属性->配置属性-> ...
 - springboot对传参的拦截统一处理
			
在学习某网<java秒杀系统方案优化>的课程中,学到了一种springboot对传参的拦截统一处理的方式,特记录一下. 如后台方法一般需要根据token从Session中获取User对象, ...
 - update外联表,用另一个表数据更新本表数据
			
update s set s.classbid = lc.itemidfrom dbo.Lv_servers as s INNER JOIN dbo.Lv_LineChannel as lc O ...
 - Windows下VMware虚拟机使用Centos,Docker方式安装openstf的小坑
			
今天使用docker方式安装openstf碰到了一小坑,坑了我半天.特此记录! docker方式安装stf就不说了,网上教程一大把. 但是... 安装完之后.进入web控制界面,手机连接的好好的.但硕 ...
 - git apply、git am打补丁.diff 和 .patch【转】
			
本文转载自:https://www.jianshu.com/p/e5d801b936b6 前提: 生成patch: git format-patch -M master 生成指定patch,0163b ...
 - POJ2516 Minimum Cost —— 最小费用最大流
			
题目链接:https://vjudge.net/problem/POJ-2516 Minimum Cost Time Limit: 4000MS Memory Limit: 65536K Tota ...
 - POJ1651 Multiplication Puzzle —— DP 最优矩阵链乘 区间DP
			
题目链接:https://vjudge.net/problem/POJ-1651 Multiplication Puzzle Time Limit: 1000MS Memory Limit: 65 ...
 - windows下运行swoole搭建环境
			
swoole windows环境搭建 swoole框架是一个很神奇很厉害的框架,它弥补了PHP的本身的一些不足之处.其实swoole确切的说是一个使用C语言编写的PHP扩展,并且这个扩展不能够在win ...
 - hdu2063 二分图(基础题)
			
这个题目适合刚刚接触二分图的同学做哦: 给一个题目链接 点击打开链接. 题目大意,有K个男女匹配方式, 输入数据的第一行是三个整数K , M , N,分别表示可能的组合数目,女生的人数,男生的人数.0 ...