loj#6169. 相似序列 hash+主席树
因为他的相似是在排完序下的
那我就在排序的情况下hash啊
这怎么hash啊
主席树啊!
没了
#include <bits/stdc++.h>
#define MAXNODE 5000000
#define MAX 200000
using namespace std;
int NODE,T,n,q,_l,_r,L,R;
int a[MAX],val[MAX],ma[MAX],root[MAX];
int tr[MAXNODE],c[MAXNODE][];
int change(int acc,int l,int r,int x,int y)
{
if(l==r)
{
tr[++NODE]=y+tr[acc];
c[NODE][]=c[NODE][]=;
return NODE;
}
int now=++NODE,mid=l+r>>;
if(x<=mid)
c[now][]=change(c[acc][],l,mid,x,y),
c[now][]=c[acc][];
else
c[now][]=c[acc][],
c[now][]=change(c[acc][],mid+,r,x,y);
tr[now]=tr[c[now][]]+tr[c[now][]];
return now;
}
int tre(int rt,int x)
{
int ret=;
for(int now=root[rt],l=,r=MAX;l<r;)
{
int mid=l+r>>;
if(x<=mid)
{
r=mid,now=c[now][];
if(r==x) return ret+tr[now];
}
if(x>mid)
l=mid+,ret+=tr[c[now][]],now=c[now][];
}
return ret;
}
int ha(int l,int r,int L,int R)
{
return tre(r,R)-tre(r,L-)-tre(l-,R)+tre(l-,L-);
}
int main()
{
srand(time());
for(scanf("%d",&T);T;T--)
{
scanf("%d%d",&n,&q);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
val[i]=ma[a[i]]?ma[a[i]]:(ma[a[i]]=rand());
// val[i]=a[i];
}
root[]=;c[][]=c[][]=;tr[]=;NODE=;
for(int i=;i<=n;i++)
root[i]=change(root[i-],,MAX,a[i],val[i]);
for(int i=;i<=q;i++)
{
scanf("%d%d%d%d",&_l,&_r,&L,&R);
bool gg=;
for(int l=,r=MAX;l<r;)
{
int mid=l+r>>;
if(ha(_l,_r,l,mid)==ha(L,R,l,mid))
l=mid+;
else
if(ha(_l,_r,mid+,r)==ha(L,R,mid+,r))
r=mid;
else
{
int ll=l,rr=mid;
for(;ll<rr;)
{
int mm=ll+rr>>;
if(ha(_l,_r,ll,mm)==ha(L,R,ll,mm)) ll=mm+;
else rr=mm;
}
int tt=ll;
ll=mid+,rr=r;
for(;ll<rr;)
{
int mm=ll+rr>>;
if(ha(_l,_r,mm+,rr)==ha(L,R,mm+,rr)) rr=mm;
else ll=mm+;
}
int ttt=ll;
if(tt==ttt- || ha(_l,_r,tt+,ttt-)== && ha(L,R,tt+,ttt-)==) break;
else
{
gg=;
break;
}
}
}
puts((gg==)?"NO":"YES");
}
}
return ;
}
loj#6169. 相似序列 hash+主席树的更多相关文章
- 【LOJ#6073】距离(主席树)
[LOJ#6073]距离(主席树) 题面 LOJ 题解 两点间的距离是\(dep[x]+dep[y]-2dep[LCA]\). 那么题目要求的东西拆开维护,唯一不好做的就是\(2dep[LCA]\). ...
- 【BZOJ3207】花神的嘲讽计划Ⅰ Hash+主席树
[BZOJ3207]花神的嘲讽计划Ⅰ Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: “哎你傻不傻的![hqz:大笨J]” “这道题又被J屎过了!!” “J这程序怎么跑这么快 ...
- HDU 5790 Prefix(Hash + 主席树)
题目链接 Prefix 题意 给定一个字符串序列,求第$l$个字符串到第$r$个字符串之间有多少个不同的前缀 强制在线 考虑$Hash$ 首先把所有前缀都$hash$出来,按顺序组成一个长度不超过 ...
- BZOJ_3207_花神的嘲讽计划1_(Hash+主席树)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3207 给出一个长度为\(n\)的串,以及\(m\)个长度为\(k\)的串,求每个长度为\(k\ ...
- 【洛谷5294】[HNOI2019] 序列(主席树维护单调栈+二分)
点此看题面 大致题意: 给你一个长度为\(n\)的序列\(A\),每次询问修改一个元素(只对当前询问有效),然后让你找到一个不下降序列\(B\),使得这两个序列相应位置之差的平方和最小,并输出这个最小 ...
- [CSP-S模拟测试]:序列(主席树)
题目描述 小$A$把自己之前得到的序列展示给了小$B$,不过这一次,他并不要求小$B$模仿他之前的行为.他给了小$B$一些询问,每个询问都是$l\ r\ x$的形式,要求小$B$数出在序列的第$l$个 ...
- 2018.10.08 NOIP模拟 序列(主席树)
传送门 T2防ak题? 其实也不是很难(考试时sb了). 直接变形一下求出区间长度在[l2,r2][l2,r2][l2,r2]之间,中位数≤l1−1\le l1-1≤l1−1的区间数,和区间长度在[l ...
- LOJ 2555 「CTSC2018」混合果汁——主席树
题目:https://loj.ac/problem/2555 二分答案,在可以选的果汁中,从价格最小的开始选. 按价格排序,每次可以选的就是一个前缀.对序列建主席树,以价格为角标,维护体积和.体积*价 ...
- 主席树||可持久化线段树||BZOJ 3524: [Poi2014]Couriers||BZOJ 2223: [Coci 2009]PATULJCI||Luogu P3567 [POI2014]KUR-Couriers
题目:[POI2014]KUR-Couriers 题解: 要求出现次数大于(R-L+1)/2的数,这样的数最多只有一个.我们对序列做主席树,每个节点记录出现的次数和(sum).(这里忽略版本差值问题) ...
随机推荐
- 分享知识-快乐自己:全面解析 java注解实战指南
请你在看这篇文章时,不要感到枯燥,从头到尾一行行看,代码一行行读,你一定会有所收获的. 问: 为什么学习注解? 学习注解有什么好处? 学完能做什么? 答: 1):能够读懂别人的代码,特别是框架相关的代 ...
- python基础-正则1
什么是正则表达式? 正则表达式是一种小型的\高度专业化的变成语言,主要用于字符串处理 正则表达式是一种通用语言,在python中通过re模块实现,import re 工具:在线正则表达式测试 http ...
- hdu 6121 Build a tree
/** * 题意:一棵 n 个点的完全 k 叉树,结点标号从 0 到 n - 1,求以每一棵子树的大小的异或和. * 解法:k叉树,当k=1时,特判,用xorn函数,具体解释:http://blog. ...
- listen 65
Don't Treat Old Gadgets Like Garbage Did you get a new tablet or computer this holiday season? A new ...
- codeforces 659A A. Round House(水题)
题目链接: A. Round House time limit per test 1 second memory limit per test 256 megabytes input standard ...
- DDP入门
DDP,即动态动态规划,可以用于解决一类带修改的DP问题. 我们从一个比较简单的东西入手,最大子段和. 带修改的最大子段和其实是常规问题了,经典的解决方法是用线段树维护从左,右开始的最大子段和和区间最 ...
- Redis 客户端安装与远程连接图解
Linux环境:Centos 6.8 Redis服务端版本:3.2.6 Redis客户端下载链接:https://redisdesktop.com/download 省略Linux系统安装Redis教 ...
- Digging-贪心
When it comes to the Maya Civilization, we can quickly remind of a term called the end of the world. ...
- GroupItem ContextMenu Command mvvm
参照:https://stackoverflow.com/questions/38009642/how-do-i-bind-the-menuitem-of-a-contextmenu-of-a-dat ...
- win10怎样彻底关闭windows Defender
首先,我们在电脑中需要进入注册表编辑器进行修改,win10电脑进入windows Defender可以有两种方式,第一种是通过电脑自带的小娜进入,第二种则是常规的win加r. 不管使用哪种方式,首 ...