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. springboot的推荐模板引擎-Thymeleaf

    1)添加对themeleaf的支持的依赖 <!--Thymeleaf--> <dependency> <groupId>org.springframework.bo ...

  2. logrotate配置文件

    一.logrotate配置文件 /etc/logrotate.conf

  3. [转]解决C# WinForm 中 VSHOST.EXE 程序不关闭的问题

    右击“解决方案”--属性-调试栏-启用调试器部分-“启用Visual studio宿主进程”不勾选

  4. HDL之Bitwise operation

    1 Verilog 1.1 Bitwise operator Bitwise operators perform a bit wise operation on two operands. They ...

  5. 搞不懂的算法-排序篇<1>

    最近在学习算法,跟着<Algorithms>这本书,可能是自己水平不够吧,看完排序算法后各种,希尔,归并,快排,堆的实现在脑子里乱成一锅粥,所以就打算大概总结一下,不求精确,全面,只想用平 ...

  6. (转) RabbitMQ学习之helloword(java)

    http://blog.csdn.net/zhu_tianwei/article/details/40835555 amqp-client:http://www.rabbitmq.com/java-c ...

  7. 创建dynamics CRM client-side (一) - Client-side Events

    这个系列是帮助大家了解dynamics CRM (customer engagement CE) 的client-side 开发. Client-side Events 1. Form OnLoad ...

  8. Spring AOP 介绍与基于接口的实现

    热烈推荐:超多IT资源,尽在798资源网 声明:转载文章,为防止丢失所以做此备份. 本文来自公众号:程序之心 原文地址:https://mp.weixin.qq.com/s/vo94gVyTss0LY ...

  9. 流量监控---iftop

    一.iftop是什么? iftop是类似于top的实时流量监控工具. 官方网站:http://www.ex-parrot.com/~pdw/iftop/ 二.iftop有什么用? iftop可以用来监 ...

  10. 解决远程登录mysql命令行无法登录问题

    由于甲骨文公司收购了mysql,mysql有商业化的趋势,所以想尝试安装下mariadb . yum install mariadb-server mariadb systemctl start ma ...