bzoj 3207 花神的嘲讽计划Ⅰ 主席树+hash
花神的嘲讽计划Ⅰ
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 3112 Solved: 1086
[Submit][Status][Discuss]
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
题解:
主席树吧,两棵线段树形式相同,满足前缀和的形式是主席树的基本操作
这道题k确定,这不就随便hash就可以瞎搞了。
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> #define ull unsigned ll
#define ll long long
#define inf 18446744073709551615UL
#define N 200007
#define MX 10000007
using namespace std;
int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
} int n,m,K,cnt;
int val[N],b[N],rt[N];
int sum[MX],a[MX][];
ull H[N]; void ins(int x,int &y,unsigned ll val)
{
y=++cnt;int tmp=y;
sum[y]=sum[x]+;
unsigned ll l=,r=inf,mid;
while(l!=r)
{
mid=l/+r/;
if((l&)&&(r&))mid++;
int t=;
if(val>mid)t=,l=mid+;
else r=mid-;
a[y][t]=++cnt;
a[y][t^]=a[x][t^];
x=a[x][t];y=a[y][t];sum[y]=sum[x]+;
}
y=tmp;
}
bool query(int x,int y,unsigned ll val)
{
unsigned ll l=,r=inf,mid;
while(l!=r)
{
mid=l/+r/;
if((l&)&&(r&))mid++;
int t=;
if(val>mid) t=,l=mid+;
else r=mid-;
x=a[x][t],y=a[y][t];
}
return (sum[y]-sum[x])!=;
}
int main()
{
n=read(),m=read(),K=read();
for(int i=;i<=n;i++)
val[i]=read();
for(int i=;i<=n;i++)
H[i]=H[i-]*+val[i];
unsigned ll M=;
for(int i=;i<=K;i++)M*=;
for(int i=K;i<=n;i++)
ins(rt[i-],rt[i],H[i]-H[i-K]*M);
while(m--)
{
int x=read(),y=read();
for(int i=;i<=K;i++)
b[i]=read();
unsigned ll now=;
for(int i=;i<=K;i++)
now=now*+b[i];
if(query(rt[x+K-],rt[y],now))puts("No");
else puts("Yes");
}
}
o( ̄ヘ ̄o#),hzw的代码。
bzoj 3207 花神的嘲讽计划Ⅰ 主席树+hash的更多相关文章
- BZOJ3207花神的嘲讽计划Ⅰ——主席树+hash
题目描述 背景 花神是神,一大癖好就是嘲讽大J,举例如下: “哎你傻不傻的![hqz:大笨J]” “这道题又被J屎过了!!” “J这程序怎么跑这么快!J要逆袭了!” …… 描述 这一天DJ在给吾等众蒟 ...
- BZOJ 3207: 花神的嘲讽计划Ⅰ( hash + 可持久化线段树 )
O(NK)暴力搞出所有子串的哈希值, 然后就对哈希值离散化建权值线段树, 就是主席树的经典做法了.总时间复杂度O(NK+(N+Q)logN) ----------------------------- ...
- bzoj 3207 花神的嘲讽计划Ⅰ(哈希法+主席树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3207 [题意] 给定一个文本串,多次询问K长的模式串是否在文本[l,r]区间内出现. ...
- [BZOJ 3207] 花神的嘲讽计划Ⅰ【Hash + 可持久化线段树】
题目链接:BZOJ - 3207 题目分析 先使用Hash,把每个长度为 k 的序列转为一个整数,然后题目就转化为了询问某个区间内有没有整数 x . 这一步可以使用可持久化线段树来做,虽然感觉可以有更 ...
- [BZOJ3207] 花神的嘲讽计划Ⅰ (主席树)
Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: “哎你傻不傻的![hqz:大笨J]” “这道题又被J屎过了!!” “J这程序怎么跑这么快!J要逆袭了!” …… 描述 这一天D ...
- bzoj 3207: 花神的嘲讽计划Ⅰ
Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: "哎你傻不傻的![hqz:大笨J]" "这道题又被J屎过了!!" "J这程序 ...
- BZOJ 3207: 花神的嘲讽计划Ⅰ(莫队+哈希)
传送门 解题思路 刚开始写了个莫队+哈希+\(map\)的\(O(n\sqrt(n)log(n)\)的辣鸡做法,\(T\)飞了.后来看了看别人博客发现其实并不用拿\(map\)当桶存那些哈希值.因为只 ...
- BZOJ 3207 花神的嘲讽计划Ⅰ(函数式线段树)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3207 题意:给出一个数列,若干询问.每个询问查询[L,R]区间内是否存在某个长度为K的子 ...
- 【BZOJ】【3207】花神的嘲讽计划 I
字符串Hash+可持久化线段树 好神奇的转化…… 蒟蒻一开始还去想AC自动机去了……然而由于a[i]的范围是小于等于n,怎么也想不出一个时间复杂度合理的方法 膜拜了题解0.0原来是字符串Hash! 首 ...
随机推荐
- AJPFX关于hashmap和hashtable 的区别
Hashtable和HashMap类有三个重要的不同之处.第一个不同主要是历史原因.Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现. ...
- linux的top下buffer与cache的区别
buffer: 缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据 的区域.通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据 时,速度快的设备的操作进程不发 ...
- android动画之通过子线程来实现动画
android动画之通过子线程来实现动画 使用android动画机制,往往是相对于原始位置来进行参照. 这里通过子线程修改物体位置实现动画. 布局文件: <RelativeLayout xmln ...
- 类似QQ在线离线好友界面
把头像设置成圆形的代码如下: package com.example.lesson6_11_id19; import android.content.Context; import android.c ...
- MY $MYVIMRC
set nocompatiblesource $VIMRUNTIME/vimrc_example.vim"source $VIMRUNTIME/mswin.vim"behave m ...
- How to proxy a web site by apache2 in Ubuntu
Install apache2 To execute the install command in terminal: sudo apt-get install apache2 Then, we ca ...
- javaee 第六周作业
一.jsf(java server faces)的运行原理(工作方式) 1.jsf应用是事件驱动的,当一个事件发生时(比如用户单击一个按钮),事件通知通过HTTP发往服务器,服务器端使用叫做Faces ...
- saltstack 源码安装
面向对象编程(oop) 面向对象: 面向对象三大特性: 封装 继承 多肽封装: 封装就是将具体的客观事物封装成抽象的类.并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可行的进行信息隐藏继承 ...
- qobject_cast
void QLadderDiagramItem::GetMainForm(DoType sourceType){ for each (QWidget *w in qApp->topLevelWi ...
- protobuf的Compiler卸载
一.首先,只用remove命令是不起作用的. 二.找寻到进行make的文件夹目录,然后执行make uninstall命令. 三.通过which protoc 命令,找到protoc所在位置,rm p ...