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! 首 ...
随机推荐
- c/c++优秀博文
C进阶指南(1):整型溢出和类型提升.内存申请和管理 http://blog.jobbole.com/72830/ 软件开发中应避免的10个问题
- SqlDataAdapter用法
SqlDataAdapter和SqlCommand区别: SqlCommand就是是命令了,可以用它来执行SQL命令: SqlDataAdapter就是数据适配器了,它是用于在数据源和数据集之间通讯的 ...
- 2014-9-17二班----11 web project
http://localhost:8080/rwkj1/indexServlet?name=zhagnsan&pwd=1234 跳 转 http://localhost:8080/rwkj ...
- ConcurrentHashMap使用示例
ConcurrentHashMap使用示例 发表于2年前(2013-07-12 19:05) 阅读(3660) | 评论(0) 25人收藏此文章, 我要收藏 赞5 如何快速提高你的薪资?-实力拍“ ...
- HDU5090——Game with Pearls(匈牙利算法|贪心)(2014上海邀请赛重现)
Game with Pearls Problem DescriptionTom and Jerry are playing a game with tubes and pearls. The rule ...
- 一些CSS技巧
1.网页LOGO背景居中 html { background: #f5f7f9 url(img/logo.png) no-repeat center center fixed; backgro ...
- (六)CSS伪元素
CSS伪元素用于向某些选择器设置特殊效果. 伪元素的用法和伪类相似: selector:pseudo-element {property:value;} CSS类也可以与伪元素配合使用: select ...
- html5 touch事件实现触屏页面上下滑动(一)
最近做的做那个app的项目由于用overflow:hidden导致了很多问题,于是决定研究下html5的touch事件.想找个全面点的帖子真是难死了,虽然好多关于html5 touch的文章但大多都是 ...
- MemSQL Start[c]UP 2.0 - Round 1 B. 4-point polyline (线段的 枚举)
昨天cf做的不好,居然挂零了,还是1点开始的呢.,,, a题少了一个条件,没判断长度. 写一下B题吧 题目链接 题意: 给出(n, m),可以得到一个矩形 让你依次连接矩形内的4个点使它们的长度和最长 ...
- LA 3266 (贪心) Tian Ji -- The Horse Racing
题意: 田忌和齐王各有n匹马,如果马的速度比齐王的快就赢200,慢则输200,相等不赔不赚. 已知两人每匹马的速度(为整数)和齐王所排出的马的顺序,问田忌该如何应对才能使收益最大. 分析: 本以为是一 ...