bzoj 3207 花神的嘲讽计划Ⅰ(哈希法+主席树)
【题目链接】
http://www.lydsy.com/JudgeOnline/problem.php?id=3207
【题意】
给定一个文本串,多次询问K长的模式串是否在文本[l,r]区间内出现。
【思路】
对文本串每K个长度进行一次hash。
主席树维护val表示一个hash值 的出现次数。查询只需要找到对应的两棵主席树然后计算val的差值即可。
【代码】
#include<set>
#include<cmath>
#include<queue>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define trav(u,i) for(int i=front[u];i;i=e[i].nxt)
#define FOR(a,b,c) for(int a=(b);a<=(c);a++)
using namespace std; typedef unsigned long long ll;
const int N = 2e5+; ll read() {
char c=getchar();
ll f=,x=;
while(!isdigit(c)) {
if(c=='-') f=-; c=getchar();
}
while(isdigit(c))
x=x*+c-'',c=getchar();
return x*f;
} struct Tnode {
Tnode *ls,*rs;
int val;
} *T[N],mempool[N*],*G=mempool;
Tnode * Nw (Tnode*l,Tnode*r,int x) {
G->ls=l,G->rs=r,G->val=x;
return G++;
} Tnode* build(Tnode* p,ll l,ll r,ll pos) {
if(l==r) return Nw (0x0,0x0,p->val+);
else {
ll mid=l+((r-l)>>);
if(pos<=mid) return Nw (build(p->ls,l,mid,pos),p->rs,p->val);
else return Nw (p->ls,build(p->rs,mid+,r,pos),p->val);
}
}
int query(Tnode*x,Tnode*y,ll l,ll r,ll pos) {
if(l==r) return y->val - x->val;
else {
ll mid=l+((r-l)>>);
if(pos<=mid) return query(x->ls,y->ls,l,mid,pos);
else return query(x->rs,y->rs,mid+,r,pos);
}
} int n,m,K,a;
ll H[N],xp=,X=; int main()
{
// freopen("in.in","r",stdin);
// freopen("out.out","w",stdout);
n=read(),m=read(),K=read();
FOR(i,,n) {
a=read();
H[i]=H[i-]*X+a;
}
FOR(i,,K) xp*=X;
int l,r; T[K-]=Nw (G,G,);
FOR(i,K,n)
T[i]=build(T[i-],0ull,18446744073709551615ull,H[i]-H[i-K]*xp);
FOR(i,,m) {
l=read(),r=read();
ll H=;
FOR(j,,K) {
a=read();
H=H*X+a;
}
if(r-l+<K) { puts("Yes"); continue; }
if(query(T[l+K-],T[r],0ull,18446744073709551615ull,H) > ) puts("No");
else puts("Yes");
}
return ;
}
P.S.原来hash函数写的丑也是会WA的 TAT
bzoj 3207 花神的嘲讽计划Ⅰ(哈希法+主席树)的更多相关文章
- BZOJ 3207 花神的嘲讽计划Ⅰ(函数式线段树)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3207 题意:给出一个数列,若干询问.每个询问查询[L,R]区间内是否存在某个长度为K的子 ...
- BZOJ 3207: 花神的嘲讽计划Ⅰ( hash + 可持久化线段树 )
O(NK)暴力搞出所有子串的哈希值, 然后就对哈希值离散化建权值线段树, 就是主席树的经典做法了.总时间复杂度O(NK+(N+Q)logN) ----------------------------- ...
- bzoj 3207 花神的嘲讽计划Ⅰ 主席树+hash
花神的嘲讽计划Ⅰ Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3112 Solved: 1086[Submit][Status][Discuss] ...
- [BZOJ 3207] 花神的嘲讽计划Ⅰ【Hash + 可持久化线段树】
题目链接:BZOJ - 3207 题目分析 先使用Hash,把每个长度为 k 的序列转为一个整数,然后题目就转化为了询问某个区间内有没有整数 x . 这一步可以使用可持久化线段树来做,虽然感觉可以有更 ...
- bzoj 3207: 花神的嘲讽计划Ⅰ
Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: "哎你傻不傻的![hqz:大笨J]" "这道题又被J屎过了!!" "J这程序 ...
- BZOJ_3207_花神的嘲讽计划1_(Hash+主席树)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3207 给出一个长度为\(n\)的串,以及\(m\)个长度为\(k\)的串,求每个长度为\(k\ ...
- BZOJ 3207: 花神的嘲讽计划Ⅰ(莫队+哈希)
传送门 解题思路 刚开始写了个莫队+哈希+\(map\)的\(O(n\sqrt(n)log(n)\)的辣鸡做法,\(T\)飞了.后来看了看别人博客发现其实并不用拿\(map\)当桶存那些哈希值.因为只 ...
- [bzoj3207]花神的嘲讽计划Ⅰ[可持久化线段树,hash]
将每k个数字求一个哈希值,存入可持久化线段树,直接查询即可 #include <iostream> #include <algorithm> #include <cstd ...
- 【BZOJ】【3207】花神的嘲讽计划 I
字符串Hash+可持久化线段树 好神奇的转化…… 蒟蒻一开始还去想AC自动机去了……然而由于a[i]的范围是小于等于n,怎么也想不出一个时间复杂度合理的方法 膜拜了题解0.0原来是字符串Hash! 首 ...
随机推荐
- mysql表的一对一/一对多/多对多联系
1.数据库中的多对多关联关系一般需采用中间表的方式处理,将多对多转化为两个一对多. 2.通过表的关系,来帮助我们怎样建表,建几张表. 一对一 一张表的一条记录一定只能与另外一张表的一条记录进行对应,反 ...
- 用 React 编写2048游戏
1.代码 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="U ...
- Android:简单联网获取网页代码
设置权限,在AndroidManifest.xml加入 <uses-permission android:name="android.permission.INTERNET" ...
- Maven常用命令(转载)
Maven库: http://repo2.maven.org/maven2/ Maven依赖查询: http://mvnrepository.com/ Maven常用命令: 1. 创建Maven的普通 ...
- CentOS 7.0安装Nvidia驱动
entOS 7.0 Nvidia显卡安装步骤: 1 在英伟达官网下载相应驱动 搜索出相应的驱动后,不要直接点,而是右健,Save Link as... 否则,会出现下载半天没动静的情况. 存放的路径上 ...
- PCL—低层次视觉—点云分割(基于凹凸性)
1.图像分割的两条思路 场景分割时机器视觉中的重要任务,尤其对家庭机器人而言,优秀的场景分割算法是实现复杂功能的基础.但是大家搞了几十年也还没搞定——不是我说的,是接下来要介绍的这篇论文说的.图像分割 ...
- 如何构建你自己的Java库【翻译】
原文http://www.programcreek.com/2011/07/build-a-java-library-for-yourself/ 原文和翻译都只是参考,如有不对,欢迎指正. 代码复用是 ...
- UVa 11542 (高斯消元 异或方程组) Square
书上分析的太清楚,我都懒得写题解了.=_=|| #include <cstdio> #include <cstring> #include <cmath> #inc ...
- bzoj2326: [HNOI2011]数学作业
矩阵快速幂,分1-9,10-99...看黄学长的代码理解...然而他直接把答案保存在最后一行(没有说明...好吧应该是我智障这都不知道... #include<cstdio> #inclu ...
- HTTP请求头host解析
Host: 域名 Host表示请求的服务器网址: request headers中的host字段 例如有user.xiaoqiang.com,hotel.xiaoqiang.com 现在需要登录后 ...