[bzoj3207][花神的嘲讽计划Ⅰ] (字符串哈希+主席树)
Description
Input
Output
Sample Input
Sample Output
No
Yes
Yes
Yes
No
HINT
Solution
先把整个长字符串求出哈希前缀和,此后按k为长度,i∈[k,n]为右端点的哈希值加入可持久化线段树里,此后处理询问即可
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define mid ((x>>1)+(y>>1)+(x&y&1))
using namespace std;
typedef unsigned long long ul;
const int N=;
const ul INF=18446744073709551615UL;
inline int Rin(){
int x=,c=getchar(),f=;
for(;c<||c>;c=getchar())
if(!(c^))f=-;
for(;c>&&c<;c=getchar())
x=(x<<)+(x<<)+c-;
return x*f;
}
ul a[N],H=;
int n,m,k,rt[N],tot,sum[N*],ls[N*],rs[N*];
void modify(int &pr,int pl,ul x,ul y,ul k){
pr=++tot;
sum[pr]=sum[pl]+;
if(!(x^y))return;
ls[pr]=ls[pl];
rs[pr]=rs[pl];
if(k<=mid)modify(ls[pr],ls[pl],x,mid,k);
else modify(rs[pr],rs[pl],mid+,y,k);
}
bool query(int pr,int pl,ul x,ul y,ul k){
if(!(x^y))return sum[pr]-sum[pl];
if(k<=mid)return query(ls[pr],ls[pl],x,mid,k);
return query(rs[pr],rs[pl],mid+,y,k);
}
int main(){
n=Rin(),m=Rin(),k=Rin();
for(int i=;i<=n;i++)
a[i]=Rin()+a[i-]*;
for(int i=;i<=k;i++)
H*=;
for(int i=k;i<=n;i++)
modify(rt[i],rt[i-],,INF,a[i]-a[i-k]*H);
for(;m;m--){
ul now=;
int x=Rin(),y=Rin();
for(int i=;i<=k;i++)
now=now*+Rin();
if(query(rt[x+k-],rt[y],,INF,now))
puts("No");
else
puts("Yes");
}
return ;
}
[bzoj3207][花神的嘲讽计划Ⅰ] (字符串哈希+主席树)的更多相关文章
- BZOJ_3207_花神的嘲讽计划Ⅰ_哈希+主席树
BZOJ_3207_花神的嘲讽计划Ⅰ_哈希+主席树 Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: “哎你傻不傻的![hqz:大笨J]” “这道题又被J屎过了!!” “J这程 ...
- bzoj 3207 花神的嘲讽计划Ⅰ(哈希法+主席树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3207 [题意] 给定一个文本串,多次询问K长的模式串是否在文本[l,r]区间内出现. ...
- 【BZOJ3207】花神的嘲讽计划I 可持久化线段树/莫队
看到题目就可以想到hash 然后很自然的联想到可持久化权值线段树 WA:base取了偶数 这道题还可以用莫队做,比线段树快一些 可持久化线段树: #include<bits/stdc++.h&g ...
- BZOJ3207: 花神的嘲讽计划Ⅰ(hash)
3207: 花神的嘲讽计划Ⅰ Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3569 Solved: 1258[Submit][Status][Di ...
- BZOJ 3207: 花神的嘲讽计划Ⅰ( hash + 可持久化线段树 )
O(NK)暴力搞出所有子串的哈希值, 然后就对哈希值离散化建权值线段树, 就是主席树的经典做法了.总时间复杂度O(NK+(N+Q)logN) ----------------------------- ...
- BZOJ3207 花神的嘲讽计划I
Time Limit: 10 Sec Memory Limit: 128 MB Summary 给你一个模式串P,q个询问,对每个询问回答从Pl到Pr是否存在与给定串相同的子串,同时有所有的给定串长度 ...
- [BZOJ3207] 花神的嘲讽计划Ⅰ (主席树)
Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: “哎你傻不傻的![hqz:大笨J]” “这道题又被J屎过了!!” “J这程序怎么跑这么快!J要逆袭了!” …… 描述 这一天D ...
- BZOJ3207花神的嘲讽计划Ⅰ——主席树+hash
题目描述 背景 花神是神,一大癖好就是嘲讽大J,举例如下: “哎你傻不傻的![hqz:大笨J]” “这道题又被J屎过了!!” “J这程序怎么跑这么快!J要逆袭了!” …… 描述 这一天DJ在给吾等众蒟 ...
- 【字符串哈希】【莫队算法】bzoj3207 花神的嘲讽计划Ⅰ
既然询问的长度是确定的,那么我们可以将所有长度为K的字串弄个哈希值出来,这样字串存在性=>哈希值存在性. 自然上溢哈希,base=107比较不错. 序列长度n=>n-K+1 询问区间[x, ...
随机推荐
- JavaScript 解决 onblur 与 onclick 冲突
<input type="text" onblur="function1" /> <input type="button" ...
- React学习笔记。
有段时间没写博客了,最近这段时间有点说不出的苦,虽然说年轻的时候该多出去经历些事,但每次找工作东跑西跑,坐公交坐地铁浪费了我太多时间,我感觉到这是一种浪费,对生命的浪费.所以很想尽快找到一份工作,去努 ...
- Windows环境下vscode-go安装笔记
一.介绍 对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github.com/microsoft/vscode-go 这款插件的特性包括: ...
- PID控制
PID解释: 位置式: 可以看出,比例部分只与当前的偏差有关,而积分部分则是系统过去所有偏差的累积.位置式PI调节器的结构清晰,P和I两部分作用分明,参数调整简单明了.但直观上看,要计算第拍 ...
- 如果你也会C#,那不妨了解下F#(6):面向对象编程之“类”
前言 面向对象的思想已经非常成熟,而使用C#的程序员对面向对象也是非常熟悉,所以我就不对面向对象进行介绍了,在这篇文章中将只会介绍面向对象在F#中的使用. F#是支持面向对象的函数式编程语言,所以你用 ...
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 5 - 数据库设计
数据库方面我们需要的主要功能如下: 联系人有姓名和电子邮件地址. 联系人可以拥有多个地址. 联系人可以拥有多个电话. 为了实现目标,我们需要在数据库中创建下列表.表与表的关系如下图所示: 数据库的脚本 ...
- asp.net MVC5 学习笔记(一)
Html.ActionLink("linkText","actionName") 该重载的第一个参数是该链接要显示的文字,第二个参数是对应的控制器的方法,默认控 ...
- bzoj4518--斜率优化DP
设x[i]为第i天走的路程,s为路程总和,则: ans=[(s/m-x[1])^2+(s/m-x[2])^2+(s/m-x[3])^2+...+(s/m-x[m])^2]*m =[(s-x[1]*m) ...
- flask+sqlite3+echarts2+ajax数据可视化
前提: 准备Python + Flask+Sqlite3的平台环境(windows系统) 前面一节介绍flask怎么安装了,剩下sqlite3下载后解压,然后环境变量添加解压路径就行了 附加下载地址: ...
- Java EE必读书籍
2011-09-18 15:21 24170人阅读 评论(46) 收藏 举报 分类: JavaEE等(280) 软件工程.原理(49) 计算机历史(3) Web相关(83) Linux/Un ...