2124: 等差子序列

Description

给一个1到N的排列{Ai},询问是否存在1<=p1=3),使得Ap1,Ap2,Ap3,…ApLen是一个等差序列。

Input

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

Output

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

Sample Input

2
3
1 3 2
3
3 2 1

Sample Output

N
Y

HINT

对于100%的数据,N<=10000,T<=7

题解:

  题目说了是1到n的排列

  我们将1到n逐渐插入线段树的中,且用01表示出现状态

  假设当前x,我们只要找出与x相距距离相等的存在状态不同的就说明存在答案

  这就是线段树维护hash

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 10010
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define p 3
#define mod 1000000007
using namespace std;
typedef long long ll;
ll hash[N<<],hash2[N<<];
ll pow[N];
int a[N];
int n,t;
void pushup(int rt,int m)
{
ll tmp=m>>;
hash[rt]=(hash[rt<<]*pow[tmp]+hash[rt<<|])%mod;
hash2[rt]=(hash2[rt<<|]*pow[m-tmp]+hash2[rt<<])%mod;
}
void update(int pt,int l,int r,int rt)
{
if(l==r)
{
hash[rt]=hash2[rt]=;
return;
}
int mid=(l+r)>>;
if(pt<=mid)update(pt,lson);
else update(pt,rson);
pushup(rt,r-l+);
}
ll query(int L,int R,int l,int r,int rt)
{
if(L>R)return ;
int ans=;
if(L==l&&r==R)
{
return hash[rt];
}
int mid=(l+r)>>;
if(R<=mid)return query(L,R,lson);
else if(L>mid)return query(L,R,rson);
else return (query(L,mid,lson)*pow[R-mid]+query(mid+,R,rson))%mod;
}
ll query2(int L,int R,int l,int r,int rt)
{
if(L>R)return ;
if(L==l&&r==R)
{
return hash2[rt];
}
int mid=(l+r)>>;
if(R<=mid)return query2(L,R,lson);
else if(L>mid)return query2(L,R,rson);
else return (query2(L,mid,lson)+query2(mid+,R,rson)*pow[mid-L+])%mod;
}
int main()
{
scanf("%d",&t);
pow[]=p;
for(int i=;i<=;i++)pow[i]=(pow[i-]*p)%mod;
while(t--)
{
memset(hash,,sizeof(hash));
memset(hash2,,sizeof(hash2));
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
int flag=;
for(int i=;i<=n;i++)
{
ll len=min(a[i]-,n-a[i]);
ll tmp1=query(a[i]-len,a[i]-,,n,);
ll tmp2=query2(a[i]+,a[i]+len,,n,);
if(tmp1!=tmp2)
{
flag=;break;
}
update(a[i],,n,);
}
if(flag)printf("Y\n");
else printf("N\n");
}
}

BZOJ 2124: 等差子序列 线段树维护hash的更多相关文章

  1. bzoj 2124 等差子序列 (线段树维护hash)

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

  2. BZOJ 2124等差子序列 线段树&&hash

    [题目描述 Description] 给一个 1 到 N 的排列{Ai},询问是否存在 1<=p1<p2<p3<p4<p5<…<pLen<=N(Len& ...

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

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

  4. BZOJ 2124: 等差子序列

    Sol 线段树+Hash. 首先暴力 等差子序列至少3项就可以了,就枚举中项,枚举公差就可以了,只需要一个数在中项前出现,另一个数在中项前没出现过就可以了.复杂度 \(O(n^2)\) 然后我想了一个 ...

  5. cf213E 线段树维护hash

    链接 https://codeforces.com/contest/213/problem/E 题目大意 给出两个排列a.b,长度分别为n.m,你需要计算有多少个x,使 得\(a_1 + x; a_2 ...

  6. MemSQL Start[c]UP 2.0 - Round 1 F - Permutation 思维+线段树维护hash值

    F - Permutation 思路:对于当前的值x, 只需要知道x + k, x - k这两个值是否出现在其左右两侧,又因为每个值只有一个, 所以可以转换成,x+k, x-k在到x所在位置的时候是否 ...

  7. BZOJ2124:等差子序列(线段树,hash)

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

  8. [bzoj2124]等差子序列——线段树+字符串哈希

    题目大意 给一个1到N的排列\(A_i\),询问是否存在\(p_i\),\(i>=3\),使得\(A_{p_1}, A_{p_2}, ... ,A_{p_len}\)是一个等差序列. 题解 显然 ...

  9. bzoj 4184: shallot (线段树维护线性基)

    题面 \(solution:\) 这一题绝对算的上是一道经典的例题,它向我们诠释了一种新的线段树维护方式(神犇可以跳过了).像这一类需要加入又需要维护删除的问题,我们曾经是遇到过的像莫对,线段树... ...

随机推荐

  1. NOIP2013T1 转圈游戏 快速幂

    描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置, --, 依此 ...

  2. MSDN性能分析相关网站收集

    Visual Studio 性能分析初学者指南 | Microsoft Docshttps://docs.microsoft.com/zh-cn/visualstudio/profiling/begi ...

  3. idiom的学习笔记(一)、三栏布局

    三栏布局左右固定,中间自适应是网页中常用到的,实现这种布局的方式有很多种,这里我主要写五种.他们分别是浮动.定位.表格.flexBox.网格. 在这里也感谢一些老师在网上发的免费教程,使我们学习起来更 ...

  4. (转)es6用法

    如何在浏览器中使用es6的语法呢? 方法一:引入文件相关js文件 <script src="traceur.js"></script> <script ...

  5. javascript中变量命名冲突的问题

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. RecyclerView实现终极画廊效果 中间突出并且压住两侧布局

    先给大家上个gif 要不然下面很枯燥 忘记原来在哪里看到了..... 这个效果我找了NNNNNN长时间,,,我认为凭我现在的能力 写出来需要好久 所以 退而求其次找大神写好的... 你们不要小看了这个 ...

  7. Sql Server 优化----SQL语句的执行方式与锁以及阻塞的关系

    阻塞原因之一是不同的Session在访问同一张表的时候因为不兼容锁的原因造成的, 当前执行的SQL语句是否被阻塞(或者死锁),不仅跟当前表上的已有的锁有关,也会跟当前执行的SQL语句的执行方式有关 简 ...

  8. RAP开发入门-主题更换

    通过配置扩展点修改应用主题    ps:需要提前准备好主题(theme.css)文件   <!-- 注册主题扩展点 -->    <extension          point= ...

  9. Javascript关于JSON集合的几种循环方法

    /** * 根据json数据生成option树形控件 * 如果有children节点则自动生成树形数据 * @param {JSON} data * @param {int} n 节点深度 * @pa ...

  10. 获取 Windows Phone 的 User-Agent 字符串

    这个是简单介绍一下如何在wp开发中获取 Windows Phone 的 User-Agent 字符串,更多wp移动开发就去那个wp教程网吧.http://wp.662p.com 使用方法 public ...