题目描述

给一个1到N的排列{Ai},询问是否存在1<=p1<p2<p3<p4<p5<…<pLen<=N (Len>=3),

使得Ap1,Ap2,Ap3,…ApLen是一个等差序列。

输入

输入的第一行包含一个整数T,表示组数。

下接T组数据,每组第一行一个整数N,每组第二行为一个1到N的排列,数字两两之间用空格隔开。

N<=10000,T<=7

输出

对于每组数据,如果存在一个等差子序列,则输出一行“Y”,否则输出一行“N”。

样例输入

2
3
1 3 2
3
3 2 1

样例输出

N
Y

考虑什么时候不存在等差数列
把出现过的数字对应位置赋成1,没出现过的为0
那么扫到i时,以a[i]为中心的串如果是回文,那么就不存在以a[i]为中心的等差数列
考虑用线段树维护正反两种hash值,详情看代码吧233
这题做的时候一次忘关调试信息了,然后删的时候还不小心删多了。。。(ノへ ̄、)
 #include<cstdio>
#include<cstring>
#define ull unsigned long long
using namespace std;
int T,n,a[];
ull sum1[],sum2[],hsh[];
void add(int x,int l,int r,int q){
if(l==q&&r==q){
sum1[x]=sum2[x]=;
return;
}
int mid=(l+r)/;
if(q<=mid)add(x+x,l,mid,q);
else add(x+x+,mid+,r,q);
sum1[x]=sum1[x+x]*hsh[r-mid]+sum1[x+x+];
sum2[x]=sum2[x+x]+sum2[x+x+]*hsh[mid-l+];
}
ull query(int x,int l,int r,int L,int R,int t){
if(l==L&&r==R){
if(t==)return sum1[x];
else return sum2[x];
}
int mid=(l+r)/;
if(R<=mid)return query(x+x,l,mid,L,R,t);
else if(L>mid)return query(x+x+,mid+,r,L,R,t);
else{
if(t==)return query(x+x,l,mid,L,mid,t)*hsh[R-mid]+query(x+x+,mid+,r,mid+,R,t);
else return query(x+x,l,mid,L,mid,t)+query(x+x+,mid+,r,mid+,R,t)*hsh[mid-L+];
}
}
ull A,B;
int main(){
scanf("%d",&T);
hsh[]=;
for(int i=;i<=;i++)hsh[i]=hsh[i-]*;
while(T--){
bool ok=;
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=;i<=n;i++){
if(ok){
if(a[i]<=n/){
A=query(,,n,,*a[i]-,);
B=query(,,n,,*a[i]-,);
}
else{
A=query(,,n,*a[i]-n,n,);
B=query(,,n,*a[i]-n,n,);
}
if(A!=B)ok=;
add(,,n,a[i]);
}
else break;
}
if(ok)printf("N\n");
else printf("Y\n");
memset(sum1,,sizeof(sum1));
memset(sum2,,sizeof(sum2));
}
return ;
}

Bzoj2124(p5364): 等差子序列的更多相关文章

  1. 【BZOJ2124】等差子序列 树状数组维护hash值

    [BZOJ2124]等差子序列 Description 给一个1到N的排列{Ai},询问是否存在1<=p1<p2<p3<p4<p5<…<pLen<=N ...

  2. 【bzoj2124】等差子序列 STL-bitset

    题目描述 给一个1到N的排列{Ai},询问是否存在1<=p1<p2<p3<p4<p5<…<pLen<=N (Len>=3),使得Ap1,Ap2,A ...

  3. 【JZOJ1913】【BZOJ2124】等差子序列

    description 给一个1到N的排列{Ai},询问是否存在1<=p1<p2<p3<p4<p5<-<pLen<=N (Len>=3), 使得A ...

  4. bzoj2124: 等差子序列线段树+hash

    bzoj2124: 等差子序列线段树+hash 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2124 思路 找大于3的等差数列其实就是找等于 ...

  5. BZOJ2124 等差子序列(树状数组+哈希)

    容易想到一种暴力的做法:枚举中间的位置,设该位置权值为x,如果其两边存在权值关于x对称即合法. 问题是如何快速寻找这个东西是否存在.考虑仅将该位置左边出现的权值标1.那么若在值域上若关于x对称的两权值 ...

  6. [BZOJ2124]等差子序列/[CF452F]Permutation

    [BZOJ2124]等差子序列/[CF452F]Permutation 题目大意: 一个\(1\sim n\)的排列\(A_{1\sim n}\),询问是否存在\(i,j(i<j)\),使得\( ...

  7. [bzoj2124]等差子序列_线段树_hash

    等差子序列 bzoj-2124 题目大意:给定一个1~n的排列,问是否存在3个及以上的位置上的数构成连续的等差子序列. 注释:$1\le n\le 10^4$. 想法:这题就相当于是否存在3个数i,j ...

  8. [bzoj2124]等差子序列(hash+树状数组)

    我又来更博啦     2124: 等差子序列 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 941  Solved: 348[Submit][Statu ...

  9. bzoj2124 等差子序列(hash+线段树)

    2124: 等差子序列 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 719  Solved: 261[Submit][Status][Discuss] ...

随机推荐

  1. VirtualBox虚拟机下 解决centos系统无法上网的问题

    首先,在VirtualBox中设置网卡连接方式:点“设置”,在弹出的界面中点“网络”,最后选择“连接方式”为“桥接网卡”或者网都可以络地址转换  这两种我试了试都可以 接下来修改一个文件就行: 1.打 ...

  2. POJ 1654

    不知 是怎么看出的精度不够,吸经验吧. #include <iostream> #include <cstdio> #include <cstring> #incl ...

  3. Spark MLlib LDA 基于GraphX实现原理及源代码分析

    LDA背景 LDA(隐含狄利克雷分布)是一个主题聚类模型,是当前主题聚类领域最火.最有力的模型之中的一个,它能通过多轮迭代把特征向量集合按主题分类.眼下,广泛运用在文本主题聚类中. LDA的开源实现有 ...

  4. Android Studio 编译Gradle提示编码错误

    在Android Studio中,假设我们的代码有中文凝视.显示的时候全然正常,而编译的时候Gradle就会报错,可是又能够编译成功,并且Gradle报的错误信息,也是乱码! 这样我们就不好寻找错误原 ...

  5. JAVA基础实例(一)

    1写一个方法,用一个for循环打印九九乘法表 /** *一个for循环打印九九乘法表 */ public void nineNineMultiTable() { for (int i = 1,j = ...

  6. 使用enca进行字符集转码

    在linux进行开发与运维的时候,我们常常遇到字符编码的问题,系统字符设置.vimrc fileencoding设置.终端设置往往搞的晕头转向,当一个文件出现乱码的时候,我们通常不能识别它是什么编码的 ...

  7. 【剑指offer】Q19:二叉树的镜像

    def MirroRecursively(root): # root is None or just one node, return root if None == root or None == ...

  8. 2016.04.25,英语,《Vocabulary Builder》Unit 18

    capit, from the Latin word for 'head', caput ['keɪpət] n.头,首 , turns up in some pretty important pla ...

  9. python基于selenium+cv2+numpy实现登录某大型电商系统

    首先贴上我的安装包 一.selenium安装 I.打开pycharm,点击Settings,找到Project Interpreter,点击右边的下拉菜单下的show All...选项 II.点击sh ...

  10. Battle City

    Battle City Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7208   Accepted: 2427 Descr ...