bzoj 3207: 花神的嘲讽计划Ⅰ
Description
Input
Output
Sample Input
1 2 3 4 5 6 7 8
2 5 2 3 4
1 8 3 2 1
5 7 4 5 6
2 5 1 2 3
1 7 3 4 5
Sample Output
Yes
Yes
Yes
No
HINT
Source
这题问的是子串,一开始以为是子序列...
因为嘲讽方案的长度确定,所以l和r移动时只要考虑一个子串的变化,直接上莫队即可
这就转化为子串在区间中是否出现,经典的莫队问题判断子串用哈希即可
哈希桶存不下,但满足条件的子串是n-k个离散化一下即可
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#define int long long
using namespace std;
const int N=100010;
int gi(){
int x=0;
char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x;
}
long long pre[N],hsh[3][N],num[N],cf[N],u[N];
int cnt[N],ans[N],a[N],pos[N],block;
int query(int l,int r,int flag){
return hsh[flag][r]-hsh[flag][l-1]*pre[r-l+1];
}
struct data{
int l,r,id;long long cf;
}q[N];
bool cmp(const data &a,const data &b)
{
if(pos[a.l]==pos[b.l]) return a.r<b.r;
return pos[a.l]<pos[b.l];
}
main(){
int n=gi(),m=gi(),k=gi();
for(int i=1;i<=n;i++) a[i]=gi();
pre[0]=1;for(int i=1;i<=n;i++) pre[i]=pre[i-1]*233;
for(int i=1;i<=n;i++) hsh[1][i]=hsh[1][i-1]*233+a[i];
int t=0;for(int i=n;i>=k;i--) u[++t]=num[i]=query(i-k+1,i,1);
sort(u+1,u+t+1);t=unique(u+1,u+t+1)-u-1;
for(int i=k;i<=n;i++) num[i]=lower_bound(u+1,u+t+1,num[i])-u;
for(int i=1;i<=m;i++){
q[i].l=gi()+k-1,q[i].r=gi();q[i].id=i;
for(int j=1;j<=k;j++) cf[j]=gi();
for(int j=1;j<=k;j++) hsh[2][j]=hsh[2][j-1]*233+cf[j];
q[i].cf=query(1,k,2);int id=lower_bound(u+1,u+t+1,q[i].cf)-u;
if(q[i].cf==u[id]) q[i].cf=id;
else q[i].cf=0;
}
block=sqrt(n);for(int i=1;i<=n;i++) pos[i]=(i-1)/block+1;
sort(q+1,q+1+m,cmp);
int l=k,r=k-1;
for(int i=1;i<=m;i++){
while(r<q[i].r) r++,cnt[num[r]]++;
while(l>q[i].l) l--,cnt[num[l]]++;
while(r>q[i].r) cnt[num[r]]--,r--;
while(l<q[i].l) cnt[num[l]]--,l++;
if(!cnt[q[i].cf])ans[q[i].id]=1;
}
for(int i=1;i<=m;i++)puts(ans[i]?"Yes":"No");
return 0;
}
bzoj 3207: 花神的嘲讽计划Ⅰ的更多相关文章
- 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 花神的嘲讽计划Ⅰ(函数式线段树)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3207 题意:给出一个数列,若干询问.每个询问查询[L,R]区间内是否存在某个长度为K的子 ...
- bzoj 3207 花神的嘲讽计划Ⅰ(哈希法+主席树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3207 [题意] 给定一个文本串,多次询问K长的模式串是否在文本[l,r]区间内出现. ...
- BZOJ 3207: 花神的嘲讽计划Ⅰ(莫队+哈希)
传送门 解题思路 刚开始写了个莫队+哈希+\(map\)的\(O(n\sqrt(n)log(n)\)的辣鸡做法,\(T\)飞了.后来看了看别人博客发现其实并不用拿\(map\)当桶存那些哈希值.因为只 ...
- 【BZOJ】【3207】花神的嘲讽计划 I
字符串Hash+可持久化线段树 好神奇的转化…… 蒟蒻一开始还去想AC自动机去了……然而由于a[i]的范围是小于等于n,怎么也想不出一个时间复杂度合理的方法 膜拜了题解0.0原来是字符串Hash! 首 ...
- 【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 ...
随机推荐
- 苹果快速的修复了Mac OS High Sierra 上出现了root的漏洞
最近苹果因为Mac最新系统 Mac OS High Sierra 上出现了root的漏洞走上了风口浪尖,不过还好,在一封苹果给科技媒体'9to5 Mac'的回复中得知,苹果在接收到报告之后,立即展开修 ...
- Mybatis(一)实现单表的增删改查
1.1 什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...
- UITextField的使用小技巧
[tf setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];//修改placeHolder ...
- Python入门 - 容器类型
python的容器有四种:列表List,元祖Tuple,字典Dictionary和集合Set. 一.列表List a = [1, 2, 3, 'a', 'b', 'c'] b = 1.5 a.appe ...
- 在Github发布自己的compile包
Android入门到转行做服务员--在Github发布自己的compile包 2017-12-05 15:27:10 这是一粒代码发布的第一篇博客,一粒代码从事android开发,近期打算开始搞搞博客 ...
- 小白关于python 对象和内存的关系的一些感悟和疑惑,望大神指教
首先你输入了一个字符串,这个字符串是有大小的,电脑将其放在内存中,自动给其一个起始指针指向这个字符串的首位置,然后,你将这个字符串赋值给一个变量,这个对象又在内存中开辟出一个空间,这个变量会自动连接这 ...
- NYOJ 119 士兵杀敌(三) RMQ ST
NYOJ 119 士兵杀敌(三) RMQ ST 题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=119 思路: ST在线 预处理O(nlog ...
- sqlserver 全库查询 带架构
网上现有的全库查询,无法识别自定义架构的数据库结构: ) ) ) declare @counts int )--以上定义变量 declare cur1 cursor for select a.name ...
- javascript设计模式——模板方法模式
前面的话 在javascript开发中用到继承的场景其实并不是很多,很多时候喜欢用mix-in的方式给对象扩展属性.但这不代表继承在javascript里没有用武之地,虽然没有真正的类和继承机制,但可 ...
- onload和ready的区别
onload和ready的区别 1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行 $(document).read()是DOM结构绘制完毕后就执行,不必等到加 ...