题目连接

这题只要令 $len=3$看是否符合即可。因为是一个 $1$到 $n$的排列,考虑数列中项,那么对于一个数 $x$,令 $k=\max(n-x, x-1)$,只要存在 $d\in(1,k)$,使 $x+d$和 $x-d$位于数 $x$在序列中的位置的异侧即可。进一步分析我们要做的就是从左向右扫一遍序列,每扫过一个数就将其在值域区间上打上标记,对于目前扫到的数 $x$,判断在值域区间上以它为中心的左右长度为 $k$的区域是否对称,如果对称代表在 $[1,n]$范围内所有以它为中项的能与它形成等差数列的一对值都在同侧,不满足,否则满足。判断区间相等问题不难想到hash,用线段树维护即可。

#include<cstdio>
#include<cstring>
#define min(a,b) (a)<(b) ? (a):(b)
#define ull unsigned long long
const int maxn = 1e5+50;
const int p = 998244353; int T,n;
int a[maxn];
ull kk[maxn],hash[2][maxn<<2];
bool vis; void pushup(int x,int len){
int tt = len>>1;
hash[0][x] = (hash[0][x<<1]*kk[tt]+hash[0][x<<1|1]) % p;
hash[1][x] = (hash[1][x<<1]+hash[1][x<<1|1]*kk[len-tt]) % p;
} void update(int x,int l,int r,int val){
if(l == r){
hash[0][x] = hash[1][x] = 1;
return ;
}
int mid = l+r>>1;
if(val <= mid) update(x<<1,l,mid,val);
else update(x<<1|1,mid+1,r,val);
pushup(x,r-l+1);
} ull query(int x,int l,int r,int ql,int qr,int sta){
if(ql > qr) return 0;
if(ql <= l && qr >= r) return hash[sta][x];
int mid = l+r>>1;
if(qr <= mid) return query(x<<1,l,mid,ql,qr,sta);
else if(ql > mid) return query(x<<1|1,mid+1,r,ql,qr,sta);
ull dx = kk[qr-mid], dy = 1;
if(sta) dx = 1, dy = kk[mid-ql+1];
return (query(x<<1,l,mid,ql,mid,sta)*dx+query(x<<1|1,mid+1,r,mid+1,qr,sta)*dy) % p;
} int main(){
scanf("%d",&T); kk[0] = 1;
for(int i = 1; i < maxn; ++i) kk[i] = kk[i-1]*3%p;
while(T--){
memset(hash,0,sizeof(hash));
scanf("%d",&n); vis = 0;
for(int i = 1; i <= n; ++i) scanf("%d",&a[i]);
for(int i = 1; i <= n; ++i){
int q = min(a[i]-1,n-a[i]);
if(query(1,1,n,a[i]-q,a[i]-1,0) != query(1,1,n,a[i]+1,a[i]+q,1)){
vis = 1; break;
}
update(1,1,n,a[i]);
}
puts(vis ? "Y":"N");
}
return 0;
}

洛谷P2757 [国家集训队]等差子序列 (hash+线段树)的更多相关文章

  1. 洛谷 P2757 [国家集训队]等差子序列 解题报告

    P2757 [国家集训队]等差子序列 题目描述 给一个\(1\)到\(N\)的排列\(\{A_i\}\),询问是否存在 \[1 \le p_1<p_2<p_3<p_4<p_5& ...

  2. luogu P2757 [国家集训队]等差子序列

    题目链接 luogu P2757 [国家集训队]等差子序列 题解 线段树好题 我选择暴力 代码 // luogu-judger-enable-o2 #include<cstdio> inl ...

  3. P2757 [国家集训队]等差子序列

    P2757 [国家集训队]等差子序列 题目传送门 推荐一篇好题解 此题要求我们在一个序列中找出一个等差子序列. 显然,我们只需要考虑子序列长度len=3的情况,因为在长度为4的子序列中必定有一个长度为 ...

  4. 洛谷 P1975 [国家集训队]排队 Lebal:块内排序+树状数组

    题目描述 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和. 红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的身高有所区别 ...

  5. 模板—点分治A(容斥)(洛谷P2634 [国家集训队]聪聪可可)

    洛谷P2634 [国家集训队]聪聪可可 静态点分治 一开始还以为要把分治树建出来……• 树的结构不发生改变,点权边权都不变,那么我们利用刚刚的思路,有两种具体的分治方法.• A:朴素做法,直接找重心, ...

  6. BZOJ_2124_等差子序列_线段树+Hash

    BZOJ_2124_等差子序列_线段树+Hash Description 给一个1到N的排列{Ai},询问是否存在1<=p1<p2<p3<p4<p5<…<pL ...

  7. [洛谷P1527] [国家集训队]矩阵乘法

    洛谷题目链接:[国家集训队]矩阵乘法 题目背景 原 <补丁VS错误>请前往P2761 题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入输出格式 输入 ...

  8. 洛谷P1501 [国家集训队]Tree II(LCT,Splay)

    洛谷题目传送门 关于LCT的其它问题可以参考一下我的LCT总结 一道LCT很好的练习放懒标记技巧的题目. 一开始看到又做加法又做乘法的时候我是有点mengbi的. 然后我想起了模板线段树2...... ...

  9. 洛谷P2619 [国家集训队2]Tree I(带权二分,Kruscal,归并排序)

    洛谷题目传送门 给一个比较有逼格的名词--WQS二分/带权二分/DP凸优化(当然这题不是DP). 用来解决一种特定类型的问题: 有\(n\)个物品,选择每一个都会有相应的权值,需要求出强制选\(nee ...

  10. 洛谷 P1407 [国家集训队]稳定婚姻 解题报告

    P1407 [国家集训队]稳定婚姻 题目描述 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. 25岁的 ...

随机推荐

  1. vite — 超快且方便的编译工具

    我们编写的代码,比如 ES6. TypeScript.react 等是不能被浏览器直接识别的,需要通过 webpack .rollup 这样的构建工具来对代码进行转换.编译. 但随着项目越来越大,需要 ...

  2. 《CUDA编程:基础与实践》读书笔记(2):CUDA内存

    1. 全局内存 核函数中的所有线程都能够访问全局内存(global memory).全局内存的容量是所有设备内存中最大的,但由于它没有放在GPU芯片内部,因此具有相对较高的延迟和较低的访问速度,cud ...

  3. Ubuntu 安装部署Kubernetes(k8s)集群

    目录 一.系统环境 二.前言 三.Kubernetes 3.1 概述 3.2 Kubernetes 组件 3.2.1 控制平面组件 3.2.2 Node组件 四.配置节点的基本环境 五.节点安装doc ...

  4. 通过实战操作学git

    虽然说 "好记性不如烂笔头",但是学习不看等于没学,学习不用等于不会,所以说"实战才是检验真理的唯一标准",通过实战则会学到很多东西. 因为陈** 太懒,并且不 ...

  5. [Lua][Love Engine] 打砖块游戏实现过程与知识点

    本文旨在根据LOVE2D官方文档和教程实现打砖块的游戏,记录部分实现过程和重要知识点 目标摧毁所有砖块 玩家控制球拍左右滑动反弹小球 小球摧毁砖块 小球保持在屏幕内 小球碰到屏幕底部,GAME OVE ...

  6. [ABC151E] Max-Min Sums

    2023-03-11 题目 题目传送门 翻译 翻译 难度&重要性(1~10):5 题目来源 AtCoder 题目算法 数学 解题思路 对于一个正数 \(x,x\in A\) 一定会有 \(C_ ...

  7. 《Linux基础》07. 软件管理

    @ 目录 1:软件管理 1.1:rpm 1.1.1:查询 1.1.2:卸载 1.1.3:安装 1.2:yum 1.3:dpkg 1.4:apt 1.4.1:相关配置 1.4.2:常用指令 1.4.3: ...

  8. Ubuntu Linux 更换国内源

    Ubuntu的官方源对于国内用户来说是比较慢的,可以将它的源换成国内的源,用起来就快很多了. # Ubuntu server 环境 ubuntu@ubuntu:~$ sudo su - [ sudo ...

  9. Python自定义终端命令

    在python中自定义一个终端命令 这里我们想要将一个csv文件中的数据导入到数据库中,就可以定义一个终端命令,直接一行命令就可以将我们文件中的数据导入到数据库中,特别的简单 首先,我们先创建一个py ...

  10. 【源码】Vue.js 官方脚手架 create-vue 是怎么实现的?

    Vue.js 官方脚手架 create-vue 是怎么实现的? 摘要 本文共分为四个部分,系统解析了vue.js 官方脚手架 create-vue 的实现细节. 第一部分主要是一些准备工作,如源码下载 ...