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 ...
随机推荐
- MVC Code First(数据模型实例讲解)
首先配置好web.config <connectionStrings> <add name="BookDbContext" connectionString=&q ...
- 【转】千万不要在JS中使用连等赋值操作
原文链接 千万不要在JS中使用连等赋值操作 目录 前言 赋值顺序? 连续赋值能拆开写么? 后记 前言 文章标题这句话原本是在国外某JavaScript规范里看到的,当时并没有引起足够的重视,直到最 ...
- spring框架的一些技术总结
纵观现在互联网行业,java的地位依然不可动摇,因为java拥有着的众多开发人员和适用性广,技术与解决技术大部分开源等特点,因此java依然是众多众多开发行业作为互联网开发的首选,而说到开发,我们就不 ...
- Google 视频编码格式 VP9 究竟厉害在哪里
近期 Google 已经开始研究 VP10 了,VP10 是一个由 WebM 和 Motroska 包含的开放.免费视频编解码器.Google 也已利用 VP10 来处理 YouTube 4K 视频. ...
- 3、C#基础 - C# 的 Hello World
HelloWorld,是学会程序的通用起手式了,哈哈. 打开我们的VS:文件\新建\项目 选择"控制台应用(.NET Framework)",名称改为"HelloWorl ...
- 1、C#基础 - C# 语言简介
C# 语言和 .NET Framework 介绍 C# 是类型安全的面向对象的精妙语言,可帮助开发者生成在 .NET Framework 上运行的各种安全可靠的应用程序. C# 可用于创建 Windo ...
- Hibernate学习(五)Hibernate 多对多映射
说到多对多关系,印象最深刻的就是大学的选修课.一个学生可以选修多门课程,一门课程可以有多个学生选修,学生所选的每一门课程还有成绩.这个场景的E-R图如下: 对于多对多的关系,我们通常会抽出一张中间表( ...
- [CSS 混合模式]——mix-blend-mode/background-blend-mode简介
mix-blend-mode/background-blend-mode CSS3真是有很多的神奇的地方,这个两个元素你知道吗? 这是张大大拿过来的图,关于混合模式,借图一用. mix-blend-m ...
- java学习笔记之集合家族2
集合体系 一.数据结构 List集合储存数据结构 <1>堆栈结构 特点:先进后出 <2>队列结构 特点:先进先出 <3>数组结构 特点:查询快,增删慢 <4& ...
- ubuntu 一些琐碎知识
2017/09/01 ubuntu下面配置git公钥 $ git config --global user.name "Your Name" $ git config --glob ...