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了一 ...
随机推荐
- 【BZOJ3270】博物馆 概率DP 高斯消元
链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...
- Linux防火墙限制指定port仅仅能由指定IP訪问
须要对redis的端口做限制,仅仅能让公司内指定IP的机器訪问 -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A ...
- zzuoj--10424--无聊的课(简单几何)
10424: 无聊的课 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 81 Solved: 16 [Submit][Status][Web Boar ...
- JTextArea 加入滚动条
JTextArea texA; JScrollPane scroll; TextEdit(String name){ super(name); init(); } void init(){ this. ...
- Ubuntu下gcc安装
在Ubuntu下安装GCC和其他一些Linux系统有点不一样. 方法一: 该方法超简单:sudo apt-get build-depgcc 就上面这条命令就可以搞定 方法二:sudo apt-get ...
- Ubuntu系统下安装Eclipse
第一步:查看操作系统位数. 打开终端,输入file /sbin/init 可以看到笔者Ubuntu系统为32位,读者可以使用该命令获取自己机器上的操作系统位数. 这一步是最至关重要的一步,笔者机器处理 ...
- Net Core链接数据库
原文 在Windows下,相信大家分分钟都可以搞定.而初次接触.net core + mysql可能需要注意些细节.首先打开vs2017新建一个asp.net core项目(选Web应用程序), 然后 ...
- split(":")[0].substring(1)
java中拆分字符中的split(":")[0].substring(1)是什么意思啊,尤其[0] 可以解释一下吗?:比如你有一个字符串 "111:222:333&quo ...
- HDU 2122 Ice_cream’s world III【最小生成树】
解题思路:基础的最小生成树反思:不明白为什么i从1开始取,就一直WA,难道是因为村庄的编号是从0开始的吗 Ice_cream’s world III Time Limit: 3000/1000 MS ...
- iOS开发——AFNetworking基于https的使用
应公司项目需求,之前的项目使用的http,新项目要求使用https,这篇博客是在AFNetworking框架基于http的基础上修改而来. 1.在开始前,先要把 .crt 文件转成 .cer 文件,然 ...