题目连接

这题只要令 $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. 洛谷 P1387 最大正方形 题解

    方法1 二分+暴力+前缀和Check 注意细节 通过二维前缀和判定矩形内是否全为1,计算和等于长度的平方就判断为是 复杂度\(\Theta (n^2\log{n})\) #include <bi ...

  2. WPF中非递归(无后台代码)动态实现TreeView

    在UI界面中,树形视图是比较常用的表示层级结构的方式,WPF中提供了TreeView控件.对于TreeView控件的基本使用已经有很多文章.大都是介绍如何在XAML中使用硬编码的固定信息填充Treev ...

  3. dBeaver操作iotdb并实现导入和导出

    1.windows下操作iotdb,现在官网下载相关的iotdb包 官网地址:https://archive.apache.org/dist/iotdb/   一般建议下载 -all的  2.打开db ...

  4. 玄 - 利用DLL通知回调函数注入shellcode(上)

    序 偶然看到某国外大佬发布新技术-"Threadless"进程注入技术,据说可过EDR(确实可),总结该技术原理 - 在远程目标进程中利用DLL通知回调机制执行shellcode, ...

  5. ChatGPT如何生成可视化图表-示例中国近几年出生人口

    本教程收集于:AIGC从入门到精通教程汇总 ChatGPT本身不能直接生成可视化图表,但可以配合其他可视化工具或库 方法一:前端可视化开发库 Echarts(地址:Apache ECharts ) 方 ...

  6. API接口的设计思路

    ​ API接口设计是软件开发中非常重要的一环,良好的设计规范能够提高开发效率.减少问题和错误,并增强系统的可维护性和可扩展性.本文从程序员的视角,讨论一些常见的API接口设计规范. 一.遵循RESTf ...

  7. 解决Eclipse中启动Tomcat报unable to start within 45 seconds问题

    启动项目的时候报Server Tomcat v8.0 Server at localhost was unable to start within 45 seconds. If the server ...

  8. 数据库安装postgresql

    数据库安装postgresql 目录 数据库安装postgresql 1.数据库源替换下载 2.初始化数据库并启动安装 3.登录数据库设置密码 4.常用命令 一.常用命令 二.用户 三.权限 四.模式 ...

  9. Spring Bean 的作用域(Bean Scope)

    前言 大家好,我是 god23bin,今天我们来聊一聊 Spring 框架中的 Bean 作用域(Scope). 什么是 Bean 的作用域? 我们在以 XML 作为配置元数据的情况下,进行 Bean ...

  10. 了解JAVA内存模型(JMM)

    1.概述 我们常说的JMM指的是Java内存模型(Java Memory Model,JMM),主要用于控制Java程序解决线程间如何通信和数据同步,JMM规范了多线程访问共享内存时的 可见性.有序性 ...