【JZOJ1913】【BZOJ2124】等差子序列
description
给一个1到N的排列{Ai},询问是否存在1<=p1<p2<p3<p4<p5<…<pLen<=N (Len>=3),
使得Ap1,Ap2,Ap3,…ApLen是一个等差序列。
analysis
找出一个长度为\(3\)的等差序列即可满足要求,长度为\(3\)的都没有,更长的序列也不存在
暴力可以枚举每一个\(a[i]\),然后枚举\(x\),判断\(a[i]-x,a[i]+x\)是否在\(i\)位置前后,考虑优化这个\(O(n^2)\)
从前往后插入每一个数,设当前位的数字是\(x\),若当前位一定不是某等差序列的中间位,意味着与\(x\)差相同的每一对数都出现过了
如果在数的映射上,以\(x\)为中心的\(01\)串是回文串,则当前位为中间的等差序列不存在,否则就存在,这个比较好理解
那么维护顺序、逆序的\(01\)串哈希就用线段树,从而快速判断回文串,时间复杂度\(O(n\log n)\)
code
#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAXN 50005
#define p 805306457
#define ha 1610612741
#define ll long long
#define reg register ll
#define fo(i,a,b) for (reg i=a;i<=b;++i)
#define fd(i,a,b) for (reg i=a;i>=b;--i)
using namespace std;
ll trl[MAXN],trr[MAXN];
ll a[MAXN],powp[MAXN];
ll n,T,flag;
inline ll read()
{
ll x=0,f=1;char ch=getchar();
while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline ll max(ll x,ll y){return x>y?x:y;}
inline ll min(ll x,ll y){return x<y?x:y;}
inline void modify(ll t,ll l,ll r,ll x)
{
if (l==r){trl[t]=trr[t]=p;return;}ll mid=(l+r)>>1;
x<=mid?modify(t<<1,l,mid,x):modify((t<<1)+1,mid+1,r,x);
trl[t]=(trl[t<<1]*powp[(r-l+1)>>1]%ha+trl[(t<<1)+1])%ha;
trr[t]=(trr[t<<1]+trr[(t<<1)+1]*powp[r-l+1-((r-l+1)>>1)]%ha)%ha;
}
inline ll getl(ll t,ll l,ll r,ll x,ll y)
{
if (x>y)return 0;if (l==x && y==r)return trl[t];ll mid=(l+r)>>1;
if (y<=mid)return getl(t<<1,l,mid,x,y);else if (x>mid)return getl((t<<1)+1,mid+1,r,x,y);
else return (getl(t<<1,l,mid,x,mid)*powp[y-mid]%ha+getl((t<<1)+1,mid+1,r,mid+1,y))%ha;
}
inline ll getr(ll t,ll l,ll r,ll x,ll y)
{
if (x>y)return 0;if (l==x && y==r)return trr[t];ll mid=(l+r)>>1;
if (y<=mid)return getr(t<<1,l,mid,x,y);else if (x>mid)return getr((t<<1)+1,mid+1,r,x,y);
else return (getr(t<<1,l,mid,x,mid)+getr((t<<1)+1,mid+1,r,mid+1,y)*powp[mid-x+1]%ha)%ha;
}
int main()
{
//freopen("T1.in","r",stdin);
T=read(),powp[0]=1;
fo(i,1,40000)powp[i]=powp[i-1]*p%ha;
while (T--)
{
memset(trl,0,sizeof(trl));
memset(trr,0,sizeof(trr)),flag=0;
n=read();fo(i,1,n)a[i]=read();
fo(i,1,n)
{
ll x=a[i],len=min(x-1,n-x);
if (getl(1,1,n,x-len,x-1)!=getr(1,1,n,x+1,x+len)){flag=1;break;}
modify(1,1,n,x);
}
printf(flag?"Y\n":"N\n");
}
return 0;
}
【JZOJ1913】【BZOJ2124】等差子序列的更多相关文章
- bzoj2124: 等差子序列线段树+hash
bzoj2124: 等差子序列线段树+hash 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2124 思路 找大于3的等差数列其实就是找等于 ...
- [BZOJ2124]等差子序列/[CF452F]Permutation
[BZOJ2124]等差子序列/[CF452F]Permutation 题目大意: 一个\(1\sim n\)的排列\(A_{1\sim n}\),询问是否存在\(i,j(i<j)\),使得\( ...
- BZOJ2124 等差子序列(树状数组+哈希)
容易想到一种暴力的做法:枚举中间的位置,设该位置权值为x,如果其两边存在权值关于x对称即合法. 问题是如何快速寻找这个东西是否存在.考虑仅将该位置左边出现的权值标1.那么若在值域上若关于x对称的两权值 ...
- [bzoj2124]等差子序列_线段树_hash
等差子序列 bzoj-2124 题目大意:给定一个1~n的排列,问是否存在3个及以上的位置上的数构成连续的等差子序列. 注释:$1\le n\le 10^4$. 想法:这题就相当于是否存在3个数i,j ...
- [bzoj2124]等差子序列(hash+树状数组)
我又来更博啦 2124: 等差子序列 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 941 Solved: 348[Submit][Statu ...
- bzoj2124 等差子序列(hash+线段树)
2124: 等差子序列 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 719 Solved: 261[Submit][Status][Discuss] ...
- BZOJ2124:等差子序列(线段树,hash)
Description 给一个1到N的排列{Ai},询问是否存在1<=p1<p2<p3<p4<p5<…<pLen<=N (Len>=3), 使得A ...
- BZOJ2124: 等差子序列(树状数组&hash -> bitset 求是否存在长度为3的等差数列)
2124: 等差子序列 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 2354 Solved: 826[Submit][Status][Discuss ...
- BZOJ2124: 等差子序列
题意:给一个 1 到 N 的排列{Ai},询问是否存在 1<=p1<p2<p3<p4<p5<…<pLen<=N(Len>=3),使得 Ap1,Ap ...
- [bzoj2124]等差子序列——线段树+字符串哈希
题目大意 给一个1到N的排列\(A_i\),询问是否存在\(p_i\),\(i>=3\),使得\(A_{p_1}, A_{p_2}, ... ,A_{p_len}\)是一个等差序列. 题解 显然 ...
随机推荐
- Python的pip源切换为国内阿里云镜像
Python的pip源切换为国内阿里云镜像 找到用户目录 C:\Users\用户\pip,如果不存在就新建该文件夹. 新建文件pip.ini,并用文本编辑器输入以下内容并保存 [global] ind ...
- Halo(九)
跨域问题 域名A(http://www.a.com)的 Web 应用程序中, 通过标签引入了域名B(http://ww.b.com)站点的某图片资源(http://www.b.com/image.jp ...
- 1,MySQL常用函数
一,MySQL聚合函数 1,AVG()函数 AVG()函数是一个聚合函数,它用于计算一组值或表达式的平均值. AVG()函数的语法如下: AVG(DISTINCT expression) 例如有如下p ...
- 【C++11新特性】 C++11智能指针之shared_ptr
C++中的智能指针首先出现在“准”标准库boost中.随着使用的人越来越多,为了让开发人员更方便.更安全的使用动态内存,C++11也引入了智能指针来管理动态对象.在新标准中,主要提供了shared_p ...
- php fmod()函数 语法
php fmod()函数 语法 作用:fmod()函数的作用是两个数值做除法运算后的余数 语法:fmod(X,Y).大理石平台哪家好 参数: 参数 描述 X 必须,X为除数 Y 必须,被除数,如果Y为 ...
- 4412 搭建和测试NFS服务器
一.NFS网络文件系统 NFS是Network FileSystem的缩写,NFS是基于UDP/IP协议的应用.它的最大功能就是可以通过网络让不同的机器,不通的操作系统彼此共享文件, 可以通过NFS挂 ...
- 【LeetCode 76】最小覆盖子串
题目链接 [题解] 尺取法. 用l和r代表一个合法的覆盖子串. 我们不断地扩大右指针. 直到l..r包含T中的所有字母为止(重复的就要两次以上.) 然后我们可以尝试的让l++. 看看新的l..r是不是 ...
- html 的一些基础操作
花了一天学了点html语言..不记下来的话又白学了 基础中的基础格式 <!DOCTYPE html> <html> <head> <!-- 字符集的选择 ut ...
- StrictMode 严格模式
StrictMode: 帮助程序员避免在主线程上执行耗时操作: 启动级别: 1. 启动线程级别: setThreadPolicy() 2. 启动应用级别 : setVmPolicy() —— 对 ...
- Android Studio使用tips
安装位置:C:\Users\xxx\AppData\Local\Android\sdk https://developer.android.com/topic/libraries/support-li ...