【BZOJ2124】等差子序列 树状数组维护hash值
【BZOJ2124】等差子序列
Description
Input
Output
Sample Input
3
1 3 2
3
3 2 1
Sample Output
Y
题解:显然我们只要让len=3就行。考虑枚举中间数,用桶维护之前已经出现过的数。我们将桶看成一个01串,如果当前数是v[i],考虑桶中v[i]左右两边的串。如果存在v[i]-j和v[i]+j在桶中的存在情况不同,则表明找到了一个等差子序列。即,如果不存在等差子序列,则桶中v[i]的左右两边一定是对称的。用树状数组维护桶的正反hash值即可。
我才不会告诉你这题直接用bitset就能过呢~
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const ll P=1000000009;
const int maxn=10010;
int n;
int v[maxn];
ll bs[maxn];
struct node
{
ll s[maxn];
inline void updata(int x,ll val)
{
for(int i=x;i<=n;i+=i&-i) s[i]=(s[i]+val)%P;
}
inline ll query(int x)
{
ll ret=0;
for(int i=x;i;i-=i&-i) ret=(ret+s[i])%P;
return ret;
}
}s1,s2;
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
void work()
{
n=rd();
int i,a;
for(i=1;i<=n;i++) v[i]=rd();
memset(s1.s,0,sizeof(s1.s)),memset(s2.s,0,sizeof(s2.s));
for(bs[0]=1,i=1;i<=n;i++) bs[i]=bs[i-1]*131%P;
for(i=1;i<=n;i++)
{
a=min(v[i]-1,n-v[i]);
if((s1.query(v[i]+a)-s1.query(v[i])+P)*bs[n-v[i]+1]%P!=(s2.query(n-v[i]+1+a)-s2.query(n-v[i]+1)+P)*bs[v[i]]%P)
{
printf("Y\n");
return ;
}
s1.updata(v[i],bs[v[i]]),s2.updata(n-v[i]+1,bs[n-v[i]+1]);
}
printf("N\n");
}
int main()
{
int T=rd();
while(T--) work();
return 0;
}//2 3 1 3 2 3 3 2 1
【BZOJ2124】等差子序列 树状数组维护hash值的更多相关文章
- bzoj 2124 等差子序列 树状数组维护hash+回文串
等差子序列 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 1919 Solved: 713[Submit][Status][Discuss] Desc ...
- CF452F Permutations/Luogu2757 等差子序列 树状数组、Hash
传送门--Luogu 传送门--Codeforces 如果存在长度\(>3\)的等差子序列,那么一定存在长度\(=3\)的等差子序列,所以我们只需要找长度为\(3\)的等差子序列.可以枚举等差子 ...
- ACdreamoj 1011(树状数组维护字符串hash前缀和)
题目链接:http://acdream.info/problem? pid=1019 题意:两种操作,第一种将字符串某个位置的字符换为还有一个字符.另外一种查询某个连续子序列是否是回文串: 解法:有两 ...
- [poj3378] Crazy Thairs (DP + 树状数组维护 + 高精度)
树状数组维护DP + 高精度 Description These days, Sempr is crazed on one problem named Crazy Thair. Given N (1 ...
- ural 1989(树状数组+多项式hash)
题意:给出一个字符串.有两种操作,一个是p a b,问字符串从位置a到位置b的子串是否是一个回文子串.还有一个操作 c a b,把字符串位置a的字符替换为b. 题解:由于字符串长度为1e5且问的次数也 ...
- HDU 5869 Different GCD Subarray Query (GCD种类预处理+树状数组维护)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5869 问你l~r之间的连续序列的gcd种类. 首先固定右端点,预处理gcd不同尽量靠右的位置(此时gc ...
- POJ 3321 Apple Tree(后根遍历将树转化成序列,用树状数组维护)
题意:一棵树,有很多分叉,每个分叉上最多有1个苹果. 给出n,接下来n-1行,每行u,v,表示分叉u,v之间有树枝相连.这里数据中u相当于树中的父节点,v相当于子节点. 给出两个操作: 1.C x ...
- 第十二届湖南省赛G - Parenthesis (树状数组维护)
Bobo has a balanced parenthesis sequence P=p 1 p 2…p n of length n and q questions. The i-th questio ...
- LOJ107. 维护全序集【树状数组维护全序集】
题目描述 这是一道模板题,其数据比「普通平衡树」更强. 如未特别说明,以下所有数据均为整数. 维护一个多重集 S ,初始为空,有以下几种操作: 把 x 加入 S 删除 S 中的一个 x,保证删除的 x ...
随机推荐
- Python-编码之大彻大悟
1.了解各种编码的来历及其在计算机内部的存储: http://www.cnblogs.com/JohnABC/p/3507219.html http://www.ruanyifeng.com/blog ...
- Ubuntu 安装配置 JDK+Tomcat+Nginx
安装配置JDK 下载安装 # 下载: wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=acc ...
- 5V转3.3v电路
方案一: MIC5205-3.3 输出电流150ma 输出电压3.3V 其中:CT24为钽电容: 方案二: AMS1117-3.3 输出电流800ma 输出电压:3.3V 输入电压:4.75~12v
- 【转载】Hibernate 关联关系
http://www.cnblogs.com/whgk/category/910622.html
- Redis 实例排除步骤
Redis 应用案例 - 在问题中不断成长 原创 2017-02-05 杜亦舒 本文翻译整理自 Andy Grunwald 发布的一篇文章,写的是作者所在公司使用 Redis 时遇到的问题,以及处理 ...
- 绝不能错过的10款最新OpenStack网络运维 & 监控工具
摘要 今天我们要推荐给大家的是关于奥斯汀OpenStack Summit的OpenStack网络方面功能与工具相关的技术演讲. 希望可以帮助国内的开发者.架构师和用户更好地了解OpenStack在SD ...
- 李洪强IOS开发之iOS好项目收集
李洪强IOS开发之iOS好项目收集 在这里收集一些最近出现的比较实用好玩的框架或者项目,会不断更新 项目 简述 日期 SCTableViewCell 类似与QQ侧滑删除Cell的Demo 201501 ...
- 进程隐藏与进程保护(SSDT Hook 实现)(三)
文章目录: 1. 引子: 2. 获取当前系统下所有进程: 3. 服务管理(安装,启动,停止,卸载): 4. 应用程序和内核程序通信: 5. 小结: 1. 引子: 关于这个 SSDT Hook 实现进程 ...
- 解决eclipse偶尔无视breakpoint的行为
一般是如果你使用了T[]这样的参数列表,也就是generic array作为参数,你就算给函数打了断点,有时也会被eclipse无视 比如如下代码,你在调试main的时候,eclipse就会把doPa ...
- poj2431优先队列
A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rather ...