题意

给你一个1~n排列,问有没有一个等差数列(长度至少为3)

题解

我居然自己想到了正解。

但我最后写挂了,所以我又看了题解。

我们维护了一个以权值为下标的01序列。

我们扫描整个序列。对于每一个正在扫描的数,我们判断以这个数的权值作为对称点,01序列是否对称。

这个序列用权值树状数组维护就行。

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define LL long long
const LL mod=1e9+;
int n,t;
const int N=;
LL pw[N],c1[N],c2[N];
int a[N];
int min(int a,int b){
if(a<b)return a;
else return b;
}
int lowbit(int x){
return x&(-x);
}
LL check1(int x){
LL ans=;
for(int i=x;i>=;i-=lowbit(i)){
ans=(ans+(c1[i]*pw[x-i])%mod)%mod;
}
return ans;
}
LL check2(int x){
LL ans=;
for(int i=x;i>=;i-=lowbit(i)){
ans=(ans+(c2[i]*pw[x-i])%mod)%mod;
}
return ans;
}
LL add1(int x){
for(int i=x;i<=n;i+=lowbit(i)){
c1[i]=(c1[i]+pw[i-x])%mod;
}
}
LL add2(int x){
for(int i=x;i<=n;i+=lowbit(i)){
c2[i]=(c2[i]+pw[i-x])%mod;
}
return ;
}
LL query1(int l,int r){
LL p=check1(l-),q=check1(r);
return ((q-p*pw[r-l+])%mod+mod)%mod;
}
LL query2(int l,int r){
LL p=check2(l-),q=check2(r);
return ((q-p*pw[r-l+])%mod+mod)%mod;
}
int main(){
scanf("%d",&t);
pw[]=;
for(int i=;i<=;i++)pw[i]=(pw[i-]*(LL))%mod;
for(int z=;z<=t;z++){
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
memset(c1,,sizeof(c1));memset(c2,,sizeof(c2));
for(int i=;i<=n;i++){
int x=a[i];
int len=min(n-x,x-);
if(len&&query1(x-len,x-)!=query2(n-x-len+,n-x)){printf("Y\n");break;}
add1(x);add2(n-x+);
if(i==n)printf("N\n");
}
}
return ;
}

最新文章

  1. Laravel中的ajax跨域请求
  2. Mysql优化系列(2)--通用化操作梳理
  3. android Context 持有导致的内存泄漏
  4. 在Spring下集成ActiveMQ
  5. struts2--表单重复提交
  6. 推导大O阶方法
  7. iOS-利用AFNetworking(AFN 1.x)-实现文件断点下载
  8. css3水平翻转
  9. 苹果教你六招:设计优秀的icon
  10. 解决Ubuntu 14.04 下SMPlayer的字幕乱码问题
  11. cf B. Two Heaps
  12. file_get_contents post数据
  13. j2ee tomcat 部署学习
  14. MySql 插入10位以上长度的字符报错or截断
  15. KoaHub.js可借助 Babel 编译稳定运行在 Node.js 环境上
  16. LeetCode 107. Binary Tree Level Order Traversal II (二叉树阶层顺序遍历之二)
  17. C#中消息的工作流程
  18. 你为什么还坚持.NET
  19. PAT乙级-1041. 考试座位号(15)
  20. 2018年html5入门到精通教程电子书百度云盘下载共22本

热门文章

  1. 寻找两个有序数组的中位数 C++实现leetcode系列(四)
  2. tabIndex-bootstrap中Get到的
  3. 为什么在3ds Max 按系统默认的快捷键AIT+W 视口最大化切换没反应?
  4. oracle根据成绩排名查询某个名次段的人员
  5. DCDCBigBig&#39;s first blog @cnblogs~
  6. Vue学习之v-if与v-show的区别
  7. POJ 2228 Naptime(DP+环形处理)
  8. [HDU5686]2016&quot;百度之星&quot; - 资格赛 Problem B
  9. Vir-manager 创建虚拟机
  10. 紫书 习题8-11 UVa 1615 (区间选点问题)