【BZOJ3207】花神的嘲讽计划Ⅰ Hash+主席树
【BZOJ3207】花神的嘲讽计划Ⅰ
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
题解:先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+主席树相关推荐
- loj#6169. 相似序列 hash+主席树
因为他的相似是在排完序下的 那我就在排序的情况下hash啊 这怎么hash啊 主席树啊! 没了 1 #include <bits/stdc++.h> 2 #define MAXNODE 5 ...
- BZOJ 3207: 花神的嘲讽计划Ⅰ
Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: "哎你傻不傻的![hqz:大笨J]" "这道题又被J屎过了!!" "J这程序 ...
- [BZOJ 3207] 花神的嘲讽计划Ⅰ【Hash + 可持久化线段树】
题目链接:BZOJ - 3207 题目分析 先使用Hash,把每个长度为 k 的序列转为一个整数,然后题目就转化为了询问某个区间内有没有整数 x . 这一步可以使用可持久化线段树来做,虽然感觉可以有更 ...
- 【以前的空间】主席树
主席树 周五晚蔡大神讲了下,觉得不是很难的东西,然后就可是敲,发现好像就是个持久化线段树(?!) 当晚笔记: 主席树,其实就是多棵可持久化权值线段树 那什么是可持久化线段树呢? 如树1中就在子树i,树 ...
- [联合集训6-25] 蓝雨 线段树+主席树+hash
先考虑p=qp=qp=q的情况,习惯先把求第kkk大变成求第k" role="presentation" style="position: relative;& ...
- 2018.10.16 NOIP模拟 长者(主席树+hash)
传送门 考试的时候开始sb的以为需要可持久化trietrietrie树,发现建树时空都是O(n2)O(n^2)O(n2)的. 然后发现由于每次只从原来的字符串改一个字符. 因此直接主席树维护区间has ...
- 线。段。树--树状数组-主席树
简单了解一下线段树 以前写过的内容,搬运过来 线段树的应用场景:满足区间加法性质且多次查询,什么是区间加法性质,比如最大值,求和,树状数组.线段树.主席树依次. 线段树框架:建树--查询--更新... ...
- 洛谷 P3302 [SDOI2013]森林 主席树+启发式合并
click here~:https://www.luogu.org/problem/P3302 emmm这个题是真的烦 一看题发现这题不是count on a tree的升级版么 如果一点思路没有的话 ...
- 主席树 + 后缀数组求LCP + 二分套二分 ---- P4094 [HEOI2016/TJOI2016]字符串
题目链接 题目大意: 解题思路: 设我们的答案为midmidmid(注意这里有坑是[a,b][a,b][a,b]的所有子串和[c,d][c,d][c,d]这个子串的最长lcplcplcp),那么我们会 ...
- 主席树 + 树上倍增 ---- codeforces 587C[树上倍增或者主席树]
题目链接 给定一棵n个点的树,给定m个人(m≤n)在哪个点上的信息,每个点可以有任意个人:然后给q个询问,每次问u到v上的路径有的点上编号最小的k(k≤10)个人(没有那么多人就该有多少人输出多少人) ...
最新文章
- ssh报错 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
- Linux项目自动化构建工具 make/Makefile
- python笔试常见题
- 好久没到这个地方来.
- 读书笔记8-浪潮之巅(part3)
- hadoop--windows环境配置hadoop-3.2.2
- 深入剖解linux逻辑卷LVM
- mysql:多表查询方式
- c语言例题之杨辉三角
- 微信卡券开发-卡券核销
- 忘记MySQL密码如何重置再到重新设置密码
- 了解一下 Technorati 的后台数据库架构
- 第三届蓝桥杯Java组 黄金队列
- HBuilderx连接微信开发者工具
- cad渐开线齿轮轮廓绘制_CAD渐开线齿形怎么绘制
- 深圳中学招聘太激烈,不是名校博士别想挤破头进去!
- 列的完整性约束——设置表字段的外键约束(FOREIGN KEY,FK)
- 海康威视2022届校招面经(内含内推码)
- Lua语言历险记1.1——最简单最便捷的安装编译环境方式
- 台式计算机除尘方法,一种计算机主机箱除尘装置及其工作方法与流程