【BZOJ3207】花神的嘲讽计划Ⅰ

Description

背景
花神是神,一大癖好就是嘲讽大J,举例如下:
“哎你傻不傻的!【hqz:大笨J】”
“这道题又被J屎过了!!”
“J这程序怎么跑这么快!J要逆袭了!”
……
描述
这一天DJ在给吾等众蒟蒻讲题,花神在一边做题无聊,就跑到了一边跟吾等众蒟蒻一起听。以下是部分摘录:
1.
“J你在讲什么!”
“我在讲XXX!”
“哎你傻不傻的!这么麻烦,直接XXX再XXX就好了!”
“……”
2.
“J你XXX讲过了没?”
“……”
“那个都不讲你就讲这个了?哎你傻不傻的!”
“……”
DJ对这种情景表示非常无语,每每出现这种情况,DJ都是非常尴尬的。
经过众蒟蒻研究,DJ在讲课之前会有一个长度为N方案,我们可以把它看作一个数列;
同样,花神在听课之前也会有一个嘲讽方案,有M个,每次会在x到y的这段时间开始嘲讽,为了减少题目难度,每次嘲讽方案的长度是一定的,为K。
花神嘲讽DJ让DJ尴尬需要的条件:
在x~y的时间内DJ没有讲到花神的嘲讽方案,即J的讲课方案中的x~y没有花神的嘲讽方案【这样花神会嘲讽J不会所以不讲】。
经过众蒟蒻努力,在一次讲课之前得到了花神嘲讽的各次方案,DJ得知了这个消息以后欣喜不已,DJ想知道花神的每次嘲讽是否会让DJ尴尬【说不出话来】。

Input

第1行3个数N,M,K;
第2行N个数,意义如上;
第3行到第3+M-1行,每行K+2个数,前两个数为x,y,然后K个数,意义如上;

Output

对于每一个嘲讽做出一个回答会尴尬输出‘Yes’,否则输出‘No’

Sample Input

8 5 3
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

No
Yes
Yes
Yes
No

HINT

题中所有数据不超过2*10^9;保证方案序列的每个数字<=N
2~5中有2 3 4的方案,输出No,表示DJ不会尴尬
1~8中没有3 2 1的方案,输出Yes,表示DJ会尴尬
5~7中没有4 5 6的方案,输出Yes,表示DJ会尴尬
2~5中没有1 2 3的方案,输出Yes,表示DJ会尴尬
1~7中有3 4 5的方案,输出No,表示DJ不会尴尬

题解:先Hash,然后询问就变成了某段区间里有没有某个数,直接上主席树就好了。

不要把Yes和No弄反~(其实你看样例就能看出来)

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef unsigned long long ll;
const int maxn=200010;
ll hash[maxn],seed[maxn];
int v[maxn],rt[maxn];
int n,m,k,tot;
const ll inf=-1;
struct sag
{int ls,rs,siz;
}s[maxn*50];
int rd()
{int ret=0,f=1;   char gc=getchar();while(gc<'0'||gc>'9')  {if(gc=='-')f=-f;  gc=getchar();}while(gc>='0'&&gc<='9')  ret=ret*10+gc-'0',gc=getchar();return ret*f;
}
void insert(int x,int &y,ll l,ll r,ll pos)
{if(pos>r)   return ;y=++tot;if(l==r){s[y].siz=s[x].siz+1;return ;}ll mid=l/2+r/2+(l&r&1);if(pos<=mid) s[y].rs=s[x].rs,insert(s[x].ls,s[y].ls,l,mid,pos);else s[y].ls=s[x].ls,insert(s[x].rs,s[y].rs,mid+1,r,pos);s[y].siz=s[s[y].ls].siz+s[s[y].rs].siz;
}
int query(int x,int y,ll l,ll r,ll pos)
{if(l==r) return s[y].siz-s[x].siz;ll mid=l/2+r/2+(l&r&1);if(pos<=mid) return query(s[x].ls,s[y].ls,l,mid,pos);else    return query(s[x].rs,s[y].rs,mid+1,r,pos);
}
int main()
{n=rd(),m=rd(),k=rd();int i,j,a,b;ll t;for(seed[0]=1,i=1;i<=k;i++)   seed[i]=seed[i-1]*131;for(i=1;i<=n;i++) v[i]=rd();for(i=1;i<=k;i++) hash[1]=hash[1]*131+v[i];for(i=k+1;i<=n;i++)  hash[i-k+1]=hash[i-k]*131-v[i-k]*seed[k]+v[i];for(i=1;i<=n-k+1;i++)  insert(rt[i-1],rt[i],0,inf,hash[i]);for(i=1;i<=m;i++){a=rd(),b=rd()-k+1;for(t=0,j=1;j<=k;j++) t=t*131+rd();if(query(rt[a-1],rt[b],0,inf,t)) printf("No\n");else   printf("Yes\n");}return 0;}

转载于:https://www.cnblogs.com/CQzhangyu/p/6909384.html

【BZOJ3207】花神的嘲讽计划Ⅰ Hash+主席树相关推荐

  1. loj#6169. 相似序列 hash+主席树

    因为他的相似是在排完序下的 那我就在排序的情况下hash啊 这怎么hash啊 主席树啊! 没了 1 #include <bits/stdc++.h> 2 #define MAXNODE 5 ...

  2. BZOJ 3207: 花神的嘲讽计划Ⅰ

    Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: "哎你傻不傻的![hqz:大笨J]" "这道题又被J屎过了!!" "J这程序 ...

  3. [BZOJ 3207] 花神的嘲讽计划Ⅰ【Hash + 可持久化线段树】

    题目链接:BZOJ - 3207 题目分析 先使用Hash,把每个长度为 k 的序列转为一个整数,然后题目就转化为了询问某个区间内有没有整数 x . 这一步可以使用可持久化线段树来做,虽然感觉可以有更 ...

  4. 【以前的空间】主席树

    主席树 周五晚蔡大神讲了下,觉得不是很难的东西,然后就可是敲,发现好像就是个持久化线段树(?!) 当晚笔记: 主席树,其实就是多棵可持久化权值线段树 那什么是可持久化线段树呢? 如树1中就在子树i,树 ...

  5. [联合集训6-25] 蓝雨 线段树+主席树+hash

    先考虑p=qp=qp=q的情况,习惯先把求第kkk大变成求第k" role="presentation" style="position: relative;& ...

  6. 2018.10.16 NOIP模拟 长者(主席树+hash)

    传送门 考试的时候开始sb的以为需要可持久化trietrietrie树,发现建树时空都是O(n2)O(n^2)O(n2)的. 然后发现由于每次只从原来的字符串改一个字符. 因此直接主席树维护区间has ...

  7. 线。段。树--树状数组-主席树

    简单了解一下线段树 以前写过的内容,搬运过来 线段树的应用场景:满足区间加法性质且多次查询,什么是区间加法性质,比如最大值,求和,树状数组.线段树.主席树依次. 线段树框架:建树--查询--更新... ...

  8. 洛谷 P3302 [SDOI2013]森林 主席树+启发式合并

    click here~:https://www.luogu.org/problem/P3302 emmm这个题是真的烦 一看题发现这题不是count on a tree的升级版么 如果一点思路没有的话 ...

  9. 主席树 + 后缀数组求LCP + 二分套二分 ---- P4094 [HEOI2016/TJOI2016]字符串

    题目链接 题目大意: 解题思路: 设我们的答案为midmidmid(注意这里有坑是[a,b][a,b][a,b]的所有子串和[c,d][c,d][c,d]这个子串的最长lcplcplcp),那么我们会 ...

  10. 主席树 + 树上倍增 ---- codeforces 587C[树上倍增或者主席树]

    题目链接 给定一棵n个点的树,给定m个人(m≤n)在哪个点上的信息,每个点可以有任意个人:然后给q个询问,每次问u到v上的路径有的点上编号最小的k(k≤10)个人(没有那么多人就该有多少人输出多少人) ...

最新文章

  1. ssh报错 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
  2. Linux项目自动化构建工具 make/Makefile
  3. python笔试常见题
  4. 好久没到这个地方来.
  5. 读书笔记8-浪潮之巅(part3)
  6. hadoop--windows环境配置hadoop-3.2.2
  7. 深入剖解linux逻辑卷LVM
  8. mysql:多表查询方式
  9. c语言例题之杨辉三角
  10. 微信卡券开发-卡券核销
  11. 忘记MySQL密码如何重置再到重新设置密码
  12. 了解一下 Technorati 的后台数据库架构
  13. 第三届蓝桥杯Java组 黄金队列
  14. HBuilderx连接微信开发者工具
  15. cad渐开线齿轮轮廓绘制_CAD渐开线齿形怎么绘制
  16. 深圳中学招聘太激烈,不是名校博士别想挤破头进去!
  17. 列的完整性约束——设置表字段的外键约束(FOREIGN KEY,FK)
  18. 海康威视2022届校招面经(内含内推码)
  19. Lua语言历险记1.1——最简单最便捷的安装编译环境方式
  20. 台式计算机除尘方法,一种计算机主机箱除尘装置及其工作方法与流程

热门文章

  1. 阿里天猫亿级浏览型网站静态化架构演变
  2. 架构图解:支付宝钱包系统架构内部剖析
  3. 今年立下的 Flag 倒了几个?
  4. 线下见面会,下一站定啦!
  5. 为什么觉得今年工作特别难找?
  6. 爬虫python需要安装吗_python爬虫需要安装什么
  7. Zeppelie连接jdbc的使用
  8. bootstrap datetimepicker 位置错误
  9. 小程序中canvas绘制网络图片
  10. 何为软件的Alpha、Beta、RC和GA发布版本?