[bzoj2124]等差子序列(hash+树状数组)
2124: 等差子序列
Time Limit: 3 Sec Memory Limit: 259 MB
Submit: 941 Solved: 348
[Submit][Status][Discuss]
Description
给一个1到N的排列{Ai},询问是否存在1<=p1=3),使得Ap1,Ap2,Ap3,…ApLen是一个等差序列。
Input
输入的第一行包含一个整数T,表示组数。下接T组数据,每组第一行一个整数N,每组第二行为一个1到N的排列,数字两两之间用空格隔开。
Output
对于每组数据,如果存在一个等差子序列,则输出一行“Y”,否则输出一行“N”。
Sample Input
3
1 3 2
3
3 2 1
Sample Output
Y
HINT
对于100%的数据,N<=10000,T<=7
Source
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LL long long //别开unsigned
const LL mod=(LL)1e9+; //非洲人老老实实去找别人家的素数
int n;
LL pw[];
LL bit1[],bit2[];
int a[];
/*int binpr(int x){
int sta[10]={0},top=0;
while(x){
top++;
if(x&1)sta[top]=1;
}
++top;
while(--top){
printf("%d",sta[top]);
}
return 0;
}*/
int min(int a,int b){
return a<b?a:b;
}
int lb(int x){
return x&(-x);
}
LL q1(int x){
LL ans=;
int i=x;
while(i){
ans=(ans+(bit1[i]*pw[x-i])%mod)%mod;
i-=lb(i);
}
return ans;
}
LL q2(int x){
LL ans=;
int i=x;
while(i){
ans=(ans+(bit2[i]*pw[x-i])%mod)%mod;
i-=lb(i);
}
return ans;
}
LL c1(int x){
int i=x;
while(i<=n){
bit1[i]=(bit1[i]+pw[i-x])%mod;
i+=lb(i);
}
return ;
}
LL c2(int x){
int i=x;
while(i<=n){
bit2[i]=(bit2[i]+pw[i-x])%mod;
i+=lb(i);
}
return ;
}
LL qr1(int l,int r){
LL p=q1(l-),q=q1(r);
return ((q-p*pw[r-l+])%mod+mod)%mod;
}
LL qr2(int l,int r){
LL p=q2(l-),q=q2(r);
return ((q-p*pw[r-l+])%mod+mod)%mod;
}
int main(){
int t;
scanf("%d",&t);
pw[]=;
for(int i=;i<=;i++)pw[i]=(pw[i-]*(LL))%mod;
while(t--){
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);//坑点:按照这种算法以为是在线,BUT!多组数据!千万别在线做得出解就立马跳出!最起码先读进来
memset(bit1,,sizeof(bit1));
memset(bit2,,sizeof(bit2));
int note=;
for(int i=;i<=n;i++){
int x=a[i];
int len=min(n-x,x-);
if(len && qr1(x-len,x-)!=qr2(n-x-len+,n-x)){
note=;
puts("Y");
break;
}
c1(x);
c2(n-x+);
}
if(!note)puts("N");
}
return ;
}
后记:
06年的渣机在编辑这篇题解时蓝屏一次,死机重开(未保存)五次,卡住重开(未保存)不计其数
凭借着无限的毅力更新完毕这篇久违的题解
再立个flag:我也要当更博狂魔!
[bzoj2124]等差子序列(hash+树状数组)的更多相关文章
- bzoj2124 等差子序列(树状数组+hash)
题意 给你一个1~n排列,问有没有一个等差数列(长度至少为3) 题解 我居然自己想到了正解. 但我最后写挂了,所以我又看了题解. 我们维护了一个以权值为下标的01序列. 我们扫描整个序列.对于每一个正 ...
- BZOJ2124 等差子序列(树状数组+哈希)
容易想到一种暴力的做法:枚举中间的位置,设该位置权值为x,如果其两边存在权值关于x对称即合法. 问题是如何快速寻找这个东西是否存在.考虑仅将该位置左边出现的权值标1.那么若在值域上若关于x对称的两权值 ...
- BZOJ2124: 等差子序列(树状数组&hash -> bitset 求是否存在长度为3的等差数列)
2124: 等差子序列 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 2354 Solved: 826[Submit][Status][Discuss ...
- bzoj2124: 等差子序列线段树+hash
bzoj2124: 等差子序列线段树+hash 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2124 思路 找大于3的等差数列其实就是找等于 ...
- acdream1197 Points In Cuboid(hash树状数组)
题目链接:http://acdream.info/problem?pid=1197 题意:给出三维空间n个点,m个查询,每次查询某个立方体内的点的个数. 思路:按照一维排序,根据查询插入,其他两位用二 ...
- URAL-1989 Subpalindromes 多项式Hash+树状数组
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1989 题意:给出一个字符串,m个操作:1,修改其中一个字符串,2,询问 [a, b] 是 ...
- [poj 1533]最长上升子序列nlogn树状数组
题目链接:http://poj.org/problem?id=2533 其实这个题的数据范围n^2都可以过,只是为了练习一下nlogn的写法. 最长上升子序列的nlogn写法有两种,一种是变形的dp, ...
- P7114 [NOIP2020] 字符串匹配 (字符串hash+树状数组)
好多题解用的扩展KMP(没学过,所以不用这种方法). 我们按照题目要求记F(s)表示s串的权值,可以预处理出前缀权值(用于A)和后缀权值(用于C),枚举AB的长度i=2~n-1,不需要分开枚举,我们只 ...
- 【BZOJ】3173: [Tjoi2013]最长上升子序列(树状数组)
[题意]给定ai,将1~n从小到大插入到第ai个数字之后,求每次插入后的LIS长度. [算法]树状数组||平衡树 [题解] 这是树状数组的一个用法:O(n log n)寻找前缀和为k的最小位置.(当数 ...
随机推荐
- 数据访问的历史 Windows
节选:Programming Microsoft Visual Basic 6.0 1999 The Data Access Saga All the new database-related cap ...
- Wb应用程序开放原理
简介:基于wb的浏览器/服务器(简称B/S),架构编程,已经成为目前企业级应用程序开发的主流. 1.企业应用计算的演变:主机/呀终端的集中 ...
- Xamarin Android 真机调试时闪退
方法1:引起此问题的原因一般是因为 Mono Shared Runtime 在手机上没有运行,这个程序相当于.net运行时,没有运行的话用C#开发的程序自然无法运行. 解决方法是将此程序设置为自动运行 ...
- Wordpress 标题设置
使用标题格式:首页(网站标题 - 网站副标题),其他页面(页面标题 | 网站标题) 在后台找到头部文件head.php <?php wp_title('|', true, 'right'); e ...
- H5页面性能优化
对于一个产品,性能在用户体验中是必不可缺的一环.性能优化是个长远的事情,联想到导航项目,列出以下性能优化的方案: 一. 基本的代码层面优化: 1:合理使用css 1)正确使用Display属性 Dis ...
- asp.net页面间传值方式
使用asp.net开发项目,必然会在页面间进行传值,本文介绍几种常见的页面传值方式,仅作笔记,以便后续查找使用. 前提:新建两个页面:ValuePage.aspx,ObtainValue.aspx,本 ...
- Android--ViewPager制作APP引导页
ViewPager使用FragmentStatePagerAdapter做Adapter,引导页使用多Fragment形式. FragmentStatePagerAdapter代码如下: public ...
- Java中的集合框架
概念与作用 集合概念 现实生活中:很多事物凑在一起 数学中的集合:具有共同属性的事物的总体 java中的集合类:是一种工具类,就像是容器,储存任意数量的具有共同属性的对象 在编程时,常常需要集中存放多 ...
- C# 对象的序列化与反序列化 (DataContractJsonSerializer)
项目引用 System.Runtime.Serialization.dll 添加命名空间 using System.Runtime.Serialization.Json; 1.序列化对象,得到Json ...
- 初试FitNesse
1.下载fitnesse-standalone.jar 2.在cmd中输入,开启fitnesse server 3.在浏览器中输入: 4.编写代码: package fitnesse.slim.tes ...