BZOJ 2124 等差子序列 线段树维护哈希

$ \Rightarrow $ 戳我进BZOJ原题

等差子序列
Time Limit: 3 Sec $ \quad $ Memory Limit: 259 MB
 

Description

给一个 $ 1 $ 到 $ N $ 的排列 $ (A_i) $ ,询问是否存在 $ 1 \le p_1<p_2<p_3<p_4<p_5<…<p_ \le N (Len \ge 3) $ , 使得 $ A_,A_,A_,…A_{p_}是一个等差序列。  

Input

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

Output

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

Sample Input

 231 3 233 2 1

###Sample Output

 NY 

 

思路

  • 题目是要找 $ i<j<k $ ,使得 $ A_j - A_i = A_k - A_j $ ;

  • 我们考虑按顺序插入 $ (A_i) $ ,对于我们当前位置 $ j $ ,如果有一个 $ A_i $ 已经出现了, 但是 $ A_k $ 还没有出现,因为是排列,所以这个 $ A_k $ 必然在后面,所以答案为“Y”;

  • 我们用一个辅助数组 $ (B_i) $ ,按顺序如果 $ x $ 出现了,就标记为 $ 1 $ , 那么如果一个数 $ x $ 满足条件,那么必然有 $ B_ != B_{x+y} $ , 那么只需要判断以 $ x $ 为中心的最长的字符串是否为回文串即可;

  • 因为如果不是回文串那么必然能找到一个 $ B_ != B_{x+y} $ ,所以答案为“Y”, 判断回文串可以用正反两边 $ hash $ ,然后 $ hash $ 值要动态修改,所以用树状数组和线段树都可以;  

代码

/**************************************************************Problem: 2124User: PotremZLanguage: C++Result: AcceptedTime:2480 msMemory:2072 kb
****************************************************************/#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define int long long
#define Mod 1000000007
#define N 10005
inline int read() {register char ch;while(!isdigit(ch=getchar()));register int x=ch^'0';while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');return x;
}
int T,n,a[N],hash1[N<<2],hash2[N<<2],pows[N];
inline void pushup(int o,int len){int mid=len>>1;hash1[o]=(hash1[o<<1]*pows[mid]%Mod+hash1[o<<1|1])%Mod;hash2[o]=(hash2[o<<1]+hash2[o<<1|1]*pows[len-mid]%Mod)%Mod;
}
void updata(int o,int l,int r,int pos){if(l==r){hash1[o]=hash2[o]=1;return;}int mid=l+r>>1;if(pos<=mid) updata(o<<1,l,mid,pos);else updata(o<<1|1,mid+1,r,pos);pushup(o,r-l+1);
}
int query1(int o,int l,int r,int L,int R){if(L>R) return 0;if(L==l&&r==R) return hash1[o];int mid=l+r>>1;if(L>mid) return query1(o<<1|1,mid+1,r,L,R);else if(R<=mid) return query1(o<<1,l,mid,L,R);else return (query1(o<<1,l,mid,L,mid)*pows[R-mid]%Mod+query1(o<<1|1,mid+1,r,mid+1,R))%Mod;
}
int query2(int o,int l,int r,int L,int R){if(L>R) return 0;if(L==l&&r==R) return hash2[o];int mid=l+r>>1;if(L>mid) return query2(o<<1|1,mid+1,r,L,R);else if(R<=mid) return query2(o<<1,l,mid,L,R);else return (query2(o<<1,l,mid,L,mid)+query2(o<<1|1,mid+1,r,mid+1,R)*pows[mid-L+1]%Mod)%Mod;
}
signed main(){T=read(); pows[0]=1;for(int i=1;i<N;++i) pows[i]=(pows[i-1]<<1)%Mod;while(T--){n=read(); bool f=0;memset(hash1,0,sizeof(hash1));memset(hash2,0,sizeof(hash2));for(int i=1;i<=n;++i) a[i]=read(); for(int i=1;i<=n;++i){int len=min(n-a[i],a[i]-1);if(query1(1,1,n,a[i]-len,a[i]-1)!=query2(1,1,n,a[i]+1,a[i]+len)){ puts("Y"); break;}updata(1,1,n,a[i]);if(i==n) puts("N");}}return 0;
}

转载于:https://www.cnblogs.com/PotremZ/p/9662973.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode:892. 三维形体的表面积(Java)

在 N * N 的网格上&#xff0c;我们放置一些 1 * 1 * 1 的立方体。 每个值 v grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。 请你返回最终形体的表面积。 示例 1&#xff1a; 输入&#xff1a;[[2]] 输出&#xff1a;10 示例 2&#xff1a; 输入&#xff1a;[…

微软、IBM们的中国研究院是怎样一步步“躺平”的?

来源&#xff1a; 脑极体IBM中国研究院关闭的消息&#xff0c;又让大家想起了曾经甲骨文、微软、Adobe等外企研究机构离华的新闻。从上世纪末本世纪初来华&#xff0c;十多年情缘突然宣告分手&#xff0c;固然是遗憾的&#xff0c;也更令人好奇背后的原因。公司业绩表现不佳、研…

P1110 [ZJOI2007]报表统计

题目描述 Q的妈妈是一个出纳&#xff0c;经常需要做一些统计报表的工作。今天是妈妈的生日&#xff0c;小Q希望可以帮妈妈分担一些工作&#xff0c;作为她的生日礼物之一。 经过仔细观察&#xff0c;小Q发现统计一张报表实际上是维护一个非负整数数列&#xff0c;并且进行一些查…

斯坦福 AI 课程 10 年发展史

作者&#xff1a;Rachel Oh 、Peter Maldonado转自&#xff1a;机器之心编辑&#xff1a;杜伟、小舟在人工智能领域&#xff0c;斯坦福大学的很多课程都颇受欢迎&#xff0c;如 CS 224N 深度学习自然语言处理和 CS 229 机器学习。这些课程如何一步步发展成为今天的热门课程&…

Leetcode--820:单词的压缩编码(java)

给定一个单词列表&#xff0c;我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。 例如&#xff0c;如果这个列表是 ["time", "me", "bell"]&#xff0c;我们就可以将其表示为 S "time#bell#" 和 indexes [0, 2, 5]。 对于…

Leetcode--130. 被围绕的区域(java)

给定一个二维的矩阵&#xff0c;包含 X 和 O&#xff08;字母 O&#xff09;。 找到所有被 X 围绕的区域&#xff0c;并将这些区域里所有的 O 用 X 填充。 示例: X X X X X O O X X X O X X O X X 运行你的函数后&#xff0c;矩阵变为&#xff1a; X X X X X X X X X X X X…

6G技术长啥样?5大趋势,13个核心技术2030年落地

来源&#xff1a;智东西5G已经展开了全面商用&#xff0c;随着5G在垂直行业的不断渗透&#xff0c;人们对于6G的设想也逐步提上日程。面向2030, 6G将在5G基础上全面支持整个世界的数字化&#xff0c;并结合人工智能等技术的发展&#xff0c;实现智慧的泛在可取、全面赋能万事万…

微积分的未来:DNA、非线性、混沌、复杂系统与人工智能

导语微积分是人类历史上的伟大思想成就之一&#xff0c;也是数学领域不可或缺的一个重要分支。如果没有微积分&#xff0c;人类就不可能发明电视、微波炉、移动电话、GPS、激光视力矫正手术、孕妇超声检查&#xff0c;也不可能发现冥王星、破解人类基因组、治疗艾滋病&#xff…

Leetcode--1111. 有效括号的嵌套深度(Java)

有效括号字符串 仅由 "(" 和 ")" 构成&#xff0c;并符合下述几个条件之一&#xff1a; 空字符串 连接&#xff0c;可以记作 AB&#xff08;A 与 B 连接&#xff09;&#xff0c;其中 A 和 B 都是有效括号字符串 嵌套&#xff0c;可以记作 (A)&#xff0c…

计蒜客第三场

1、有序数组查找 假设一个数组&#xff0c;事先在你未知的情况下&#xff0c;以某一点分段有序排列。比如&#xff1a;&#xff08;0,0,0,1,2,2,3 变成 0,0,1,2,2,3,0&#xff0c;定需要查找的数&#xff0c;在当前数组中查找&#xff0c;存在&#xff0c;返回ture&#xff0c;…

美国防部官员讨论量子科学、5G和定向能的发展

来源&#xff1a;国防科技要闻3月8日&#xff0c;美国防部国防研究与工程办公室负责现代化建设的三名官员在国防工业协会太平洋作战科技虚拟会议上讨论了量子科学、5G和定向能的发展。量子科学量子科学主要负责人保罗洛帕塔表示&#xff0c;国防部在过去的二三十年里一直在进行…

牛客网--密码验证合格程序(Java)

题目描述 密码要求: 1.长度超过8位 2.包括大小写字母.数字.其它符号,以上四种至少三种 3.不能有相同长度超2的子串重复 说明:长度超过2的子串 输入描述: 一组或多组长度超过2的子符串。每组占一行 输出描述: 如果符合要求输出&#xff1a;OK&#xff0c;否则输出NG 示例1 输…

9-18 学习如何使用Python包的管理

前提是安装好Anaconda 1.如何安装一个包 这里的语句 package_name为包的名字 例如 你可以在cmd窗口下输入 按下回车后 系统将会进行安装numpy包。 你也可以同时安装多个包&#xff0c;比如同时安装numpy、scipy、pandas包。 命令如下 注&#xff1a;numpy&#xff1a;是Python的…

牛客--合唱队

题目描述 计算最少出列多少位同学&#xff0c;使得剩下的同学排成合唱队形 说明&#xff1a; N位同学站成一排&#xff0c;音乐老师要请其中的(N-K)位同学出列&#xff0c;使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形&#xff1a;设K位同学从左到右依次编号…

java连接hbase时出现....is accessible from more than one module:

今天在用java程序连接hbase时&#xff0c;出现错误&#xff0c;The package org.apache.hadoop.hbase is accessible from more than one module: &#xff0c;在网上百度也没能找出答案&#xff0c;但是经过很长时间的查找之后中遇找到了原因&#xff0c;那就是我自导入jar包时…

AR行业发展现状:定义、技术原理及商业价值

文章来源&#xff1a;AR工业应用资料源自网络《Pokemon Go》这款游戏能够大火&#xff0c;除了一个好的IP之外。AR技术也功不可没。而在AR发光之后&#xff0c;什么是AR&#xff1f;它的技术原理是怎么样的&#xff0c;它能够具备哪些商业价值&#xff1f;希望通过这篇文章&…

基础学科如何不再“又难又穷”

来源&#xff1a;光明日报投身基础学科意味着什么——“奉献”“冷板凳”“异常艰苦”……也许&#xff0c;这是横亘在数十年间&#xff0c;大学生选报志愿时对“基础学科”的“刻板印象”。在知乎、豆瓣等大学生汇集的社交网站上&#xff0c;谈到基础学科&#xff0c;一位叫刘…

配置 Docker 加速器

Linux curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io 该脚本可以将 --registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。适用于 Ubuntu14.04、Debian、CentOS6 、CentOS7、Fedora、Arch Linux、op…

Leetcode--72.编辑距离(java)

给你两个单词 word1 和 word2&#xff0c;请你计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符 删除一个字符 替换一个字符 示例 1&#xff1a; 输入&#xff1a;word1 "horse", word2 "…

2021年阿贝尔奖公布!理论计算机科学和离散数学领域学者获奖

来源&#xff1a;前瞻网3月17日&#xff0c;2021年阿贝尔奖揭晓。挪威科学和文学院决定将2021年阿贝尔奖授予来自匈牙利&#xff0c;布达佩斯罗兰大学的Lszl Lovsz 和来自美国&#xff0c;普林斯顿高等研究院的 Avi Wigderson&#xff0c;以表彰两位科学家在理论计算机科学和离…