BZOJ 2124 线段树维护hash值
思路:
http://blog.csdn.net/wzq_QwQ/article/details/47152909
(代码也是抄的他的)
自己写得垃圾线段树怎么都过不了
隔了两个月 再写 再挂
又隔了10天 再写 终于A了………………………..
//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define mod 1000000007
#define int long long
int cases,n,a[10050],hash[999999],hash2[999999],p[10050];
void push_up(int pos,int num){
int lson=pos<<1,rson=pos<<1|1;
hash[pos]=(hash[lson]*p[num/2]+hash[rson])%mod;
hash2[pos]=(hash2[rson]*p[num-num/2]+hash2[lson])%mod;
}
void insert(int l,int r,int pos,int num){
if(l==r){hash[pos]=hash2[pos]=1;return;}
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
if(num<=mid)insert(l,mid,lson,num);
else insert(mid+1,r,rson,num);
push_up(pos,r-l+1);
}
int query(int L,int R,int l,int r,int pos){
if(L==l&&r==R)return hash[pos];
int mid=(l+r)>>1;
if(R<=mid)return query(L,R,l,mid,pos<<1);
else if(L>mid)return query(L,R,mid+1,r,pos<<1|1);
else return (query(L,mid,l,mid,pos<<1)*p[R-mid]+query(mid+1,R,mid+1,r,pos<<1|1))%mod;
}
int query2(int L,int R,int l,int r,int pos){
if(L==l&&r==R)return hash2[pos];
int mid=(l+r)>>1;
if(R<=mid)return query2(L,R,l,mid,pos<<1);
else if(L>mid)return query2(L,R,mid+1,r,pos<<1|1);
else return (query2(L,mid,l,mid,pos<<1)+query2(mid+1,R,mid+1,r,pos<<1|1)*p[mid-L+1])%mod;
}
signed main(){
p[0]=1;
for(int i=1;i<=10000;i++)p[i]=(p[i-1]*3)%mod;
scanf("%lld",&cases);
while(cases--){
memset(hash,0,sizeof(hash)),memset(hash2,0,sizeof(hash2));
scanf("%lld",&n);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
for(int i=1;i<=n;i++){
int len=min(n-a[i],a[i]-1);
int tmp1=query(a[i]-len,a[i],1,n,1);
int tmp2=query2(a[i],a[i]+len,1,n,1);
if(tmp1!=tmp2){puts("Y");goto ed;}
insert(1,n,1,a[i]);
}puts("N");ed:;
}
}
BZOJ 2124 线段树维护hash值的更多相关文章
- MemSQL Start[c]UP 2.0 - Round 1 F - Permutation 思维+线段树维护hash值
F - Permutation 思路:对于当前的值x, 只需要知道x + k, x - k这两个值是否出现在其左右两侧,又因为每个值只有一个, 所以可以转换成,x+k, x-k在到x所在位置的时候是否 ...
- cf213E 线段树维护hash
链接 https://codeforces.com/contest/213/problem/E 题目大意 给出两个排列a.b,长度分别为n.m,你需要计算有多少个x,使 得\(a_1 + x; a_2 ...
- BZOJ 2124: 等差子序列 线段树维护hash
2124: 等差子序列 Description 给一个1到N的排列{Ai},询问是否存在1<=p1=3),使得Ap1,Ap2,Ap3,…ApLen是一个等差序列. Input 输入的第一行包含一 ...
- bzoj 2124 等差子序列 (线段树维护hash)
2124: 等差子序列 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 1922 Solved: 714[Submit][Status][Discuss ...
- HDU3564 --- Another LIS (线段树维护最值问题)
Another LIS Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- Codeforces Round #321 (Div. 2) E Kefa and Watch (线段树维护Hash)
E. Kefa and Watch time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- bzoj 1018 线段树维护连通性
本题将一道LCT的题特殊化(支持加边和删边,询问图的连通性),将图变成了2×m的网格图,然后就神奇地可以用线段树来维护. 对于每个区间[l,r],维护其四个角落之间的连通性(仅仅通过[l,r]这段的边 ...
- BZOJ 1018 线段树维护图的连通性问题
思路: 我们可以搞一棵线段树 对于一段区间有6种情况需要讨论 左上右下.左上右上.左下右下.左下右上 这四种比较好维护 用左上右下举个例子吧 就是左儿子的左上右下&左区间到右区间下面有路&am ...
- BZOJ 1018 线段树维护图连通性
用8个bool维护即可分别为LURU,LURD,LDRU,LDRD,LULD,RURD,Side[1],Side[2]即可. Side表示这一块有没有接到右边.Merge一下就可以了.码农题,WA了一 ...
随机推荐
- Android Parcelable vs Serializable
序列化 在Android中.对象在实现序列化之前是无法直接作为Intent參数在Activity之间传递的. Android中对象序列化能够通过实现Serializable接口或者实现Parcelab ...
- NOIP2017提高组模拟赛4 (总结)
NOIP2017提高组模拟赛4 (总结) 第一题 约数 设K是一个正整数,设X是K的约数,且X不等于1也不等于K. 加了X后,K的值就变大了,你可以重复上面的步骤.例如K= 4,我们可以用上面的规则产 ...
- bzoj1570: [JSOI2008]Blue Mary的旅行(二分+网络流)
1570: [JSOI2008]Blue Mary的旅行 题目:传送门 题解: get到拆点新姿势,还是做题太少了...ORZ 因为每天就只能有一个航班,那就不能直接连了,所以要拆点(然后就被卡住了) ...
- 极客时间 mysql实战45讲下载读 08讲事务到底是隔离的还是不隔离的 笔记
笔记体会: 1.innodb支持RC和RR隔离级别实现是用的一致性视图(consistent read view) 2.事务在启动时会拍一个快照,这个快照是基于整个库的.基于整个库的意思就是说一个事务 ...
- IE6 css fixed
.fixed-top{position:fixed;bottom:auto;top:0px;} .fixed-bottom{position:fixed;bottom:0px;top:auto;} . ...
- SpringCloud学习笔记(18)----Spring Cloud Netflix之服务网关Zuul原理
1. Zuul的工作机制 Zuul提供了一个框架,可以对过滤器进行动态的加载,编译,运行.过滤器之间没有直接的相互通信,他们是通过一个RequestContext的静态类来进行数据传递的.Requet ...
- 运维派 企业面试题6 防dos攻击
Linux运维必会的实战编程笔试题(19题) 企业实战题6:请用至少两种方法实现! 写一个脚本解决DOS攻击生产案例 提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到 ...
- vb常用的内部函数(二):字符串函数
len(string):计算字符串长度函数.返回字符串string中字符的个数.一个汉字为一个字符,空格也为一个字符,空字符串的长度为0. Ltrim(string).Rtrim(string).Tr ...
- Java正则类
ava.util.regex 类 Pattern java.lang.Object 继承者 java.util.regex.Pattern 所有已实现的接口: Serializable public ...
- POJ-1113 Wall 计算几何 求凸包
题目链接:https://cn.vjudge.net/problem/POJ-1113 题意 给一些点,求一个能够包围所有点且每个点到边界的距离不下于L的周长最小图形的周长 思路 求得凸包的周长,再加 ...