bzoj 2124 等差子序列 (线段树维护hash)
2124: 等差子序列
Time Limit: 3 Sec Memory Limit: 259 MB
Submit: 1922 Solved: 714
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
3
1 3 2
3
3 2 1
Sample Output
Y
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define mid ll m = (l + r) >> 1
const ll M = 1e5+;
const ll md = 1e9+;
ll suml[M<<],sumr[M<<],a[M],pw[M];
void pushup(ll l,ll r,ll rt){
ll len = r - l + ;
ll m = len / ;
suml[rt] = (suml[rt<<]*pw[m]+suml[rt<<|])%md;
sumr[rt] = (sumr[rt<<|]*pw[len-m]+sumr[rt<<])%md;
return ;
} void update(ll p,ll l,ll r,ll rt){
if(l == r){
suml[rt] = sumr[rt] = ;
return ;
}
mid;
if(p <= m) update(p,lson);
else update(p,rson);
pushup(l,r,rt);
} ll queryl(ll L,ll R,ll l,ll r,ll rt){
if(L > R) return ;
if(L == l&&R == r) return suml[rt];
mid;
if(L > m) return queryl(L,R,rson);
else if(R <= m) return queryl(L,R,lson);
else return (queryl(L,m,lson)*pw[R-m]+queryl(m+,R,rson))%md;
} ll queryr(ll L,ll R,ll l,ll r,ll rt){
if(L > R) return ;
if(L == l&&R == r) return sumr[rt];
mid;
if(L > m) return queryr(L,R,rson);
else if(R <= m) return queryr(L,R,lson);
else return (queryr(L,m,lson)+queryr(m+,R,rson)*pw[m-L+])%md;
} int main()
{
ll t,n;
ios::sync_with_stdio();
cin.tie(); cout.tie();
cin>>t;
pw[] = ;
for(ll i = ;i <= ;i++)
pw[i] = (pw[i-]*)%md;
while(t--){
cin>>n;
memset(suml,,sizeof(suml));
memset(sumr,,sizeof(sumr));
memset(a,,sizeof(a));
ll flag = ;
for(ll i = ;i <= n;i ++) cin>>a[i];
for(ll i = ;i <= n;i ++){
ll len = min(a[i]-,n-a[i]);
ll t1 = queryl(a[i]-len,a[i]-,,n,);
ll t2 = queryr(a[i]+,a[i]+len,,n,);
if(t1!=t2){
flag = ;break;
}
update(a[i],,n,);
}
if(!flag) cout<<"Y"<<endl;
else cout<<"N"<<endl;
}
}
bzoj 2124 等差子序列 (线段树维护hash)的更多相关文章
- BZOJ 2124: 等差子序列 线段树维护hash
2124: 等差子序列 Description 给一个1到N的排列{Ai},询问是否存在1<=p1=3),使得Ap1,Ap2,Ap3,…ApLen是一个等差序列. Input 输入的第一行包含一 ...
- BZOJ 2124等差子序列 线段树&&hash
[题目描述 Description] 给一个 1 到 N 的排列{Ai},询问是否存在 1<=p1<p2<p3<p4<p5<…<pLen<=N(Len& ...
- bzoj2124: 等差子序列线段树+hash
bzoj2124: 等差子序列线段树+hash 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2124 思路 找大于3的等差数列其实就是找等于 ...
- BZOJ 2124: 等差子序列
Sol 线段树+Hash. 首先暴力 等差子序列至少3项就可以了,就枚举中项,枚举公差就可以了,只需要一个数在中项前出现,另一个数在中项前没出现过就可以了.复杂度 \(O(n^2)\) 然后我想了一个 ...
- cf213E 线段树维护hash
链接 https://codeforces.com/contest/213/problem/E 题目大意 给出两个排列a.b,长度分别为n.m,你需要计算有多少个x,使 得\(a_1 + x; a_2 ...
- MemSQL Start[c]UP 2.0 - Round 1 F - Permutation 思维+线段树维护hash值
F - Permutation 思路:对于当前的值x, 只需要知道x + k, x - k这两个值是否出现在其左右两侧,又因为每个值只有一个, 所以可以转换成,x+k, x-k在到x所在位置的时候是否 ...
- BZOJ2124:等差子序列(线段树,hash)
Description 给一个1到N的排列{Ai},询问是否存在1<=p1<p2<p3<p4<p5<…<pLen<=N (Len>=3), 使得A ...
- [bzoj2124]等差子序列——线段树+字符串哈希
题目大意 给一个1到N的排列\(A_i\),询问是否存在\(p_i\),\(i>=3\),使得\(A_{p_1}, A_{p_2}, ... ,A_{p_len}\)是一个等差序列. 题解 显然 ...
- bzoj 4184: shallot (线段树维护线性基)
题面 \(solution:\) 这一题绝对算的上是一道经典的例题,它向我们诠释了一种新的线段树维护方式(神犇可以跳过了).像这一类需要加入又需要维护删除的问题,我们曾经是遇到过的像莫对,线段树... ...
随机推荐
- 【Unity Shader】(七) ------ 复杂的光照(下)
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Sha ...
- SAO Utils – SAO风格启动菜单
SAO Utils 是一款拥有 SAO(刀剑神域)外观风格的启动器,搭载各种各样强大的小工具. 随时随地.在屏幕任何地方 按住鼠标左键和右键并向下拖动 即可呼出应用启动菜单(触控设备直接支持双指下滑手 ...
- oracle存储过程 关于update的动态SQL-工作心得
本随笔文章,由个人博客(鸟不拉屎)转移至博客园 发布时间: 2018 年 12 月 20 日 原地址:https://niaobulashi.com/archives/oracle-procedure ...
- java基础---类加载和对象创建过程
类中可以存在的成员: class A{ 静态成员变量: 非静态成员变量: 静态函数: 非静态函数: 构造函数 A(..){...} 静态代码块 static{...} 构造代码块 {...} } 类加 ...
- CF 675E Trains and Statistic
草稿和一些题解而已 因为指针太恶心了 所以query决定还是要试试自己yy一下 #include<cstdio> #include<cstring> #include<i ...
- FFmpeg简单转码程序--视频剪辑
学习了雷神的文章,慕斯人分享精神,感其英年而逝,不胜唏嘘.他有分享一个转码程序<最简单的基于FFMPEG的转码程序>其中使用了filter(参考了ffmpeg.c中的流程),他曾说想再编写 ...
- java 第一次实验报告
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:黎静 学号:20135338 成绩: 指导教师:娄嘉鹏 ...
- centos6 安装图形化界面
1.首先进行光盘的挂载,注意光盘挂载时不会自动建立目录的,所以需要自己建立目录 mkdir /mnt/cdrom mount /dev/cdrom /mnt/cdrom #dev目录为设备目录 2.更 ...
- spring冲刺计划
会议召开时间表 日期 时间 内容 05/09 21:00-22:00 讨论题目(未果) 05/10 21:00-21:30 确定题目(网络助手) 05/13 21:00-21:45 讨论软件页面设计 ...
- Beta Scrum Day 1 — 听说
听说