Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CF452F Permutation

CF452F Permutation

作者头像
yzxoi
发布于 2022-09-19 06:09:25
发布于 2022-09-19 06:09:25
57600
代码可运行
举报
文章被收录于专栏:OIOI
运行总次数:0
代码可运行

题目链接:CF452F

给你一个1到n的排列,你需要判断该排列内部是否存在一个3个元素的子序列(可以不连续),使得这个子序列是等差序列。

n\leq 3\times 10^5

Tutorial

不妨设 g[x]x 的位置。题即求是否存在 g_{x-t} < g_x < g_{x+t}g_{x-t} > g_x > g_{x+t}

若从小到大枚举 i,其余 g 根据 g_{p_i} 大小关系赋为 0/1。则对于每个 x 判断是否存在 t 满足 g_{x-t} \not = g_{x+t}

相当于从 x 出发两侧的 g 完全相等,哈希并用线段树维护即可。

时间复杂度:O(N\log N)

Solution

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define W while
#define I inline
#define RI register int
#define LL long long
#define Cn const
#define CI Cn int&
#define gc getchar
#define D isdigit(c=gc())
#define pc(c) putchar((c))
#define min(x,y) ((x)<(y)?(x):(y))
#define max(x,y) ((x)>(y)?(x):(y))
using namespace std;
namespace Debug{
	Tp I void _debug(Cn char* f,Ty t){cerr<<f<<'='<<t<<endl;}
	Ts I void _debug(Cn char* f,Ty x,Ar... y){W(*f!=',') cerr<<*f++;cerr<<'='<<x<<",";_debug(f+1,y...);}
	Tp ostream& operator<<(ostream& os,Cn vector<Ty>& V){os<<"[";for(Cn auto& vv:V) os<<vv<<",";os<<"]";return os;}
	#define gdb(...) _debug(#__VA_ARGS__,__VA_ARGS__)
}using namespace Debug;
namespace FastIO{
	Tp I void read(Ty& x){char c;int f=1;x=0;W(!D) f=c^'-'?1:-1;W(x=(x<<3)+(x<<1)+(c&15),D);x*=f;}
	Ts I void read(Ty& x,Ar&... y){read(x),read(y...);}
	Tp I void write(Ty x){x<0&&(pc('-'),x=-x,0),x<10?(pc(x+'0'),0):(write(x/10),pc(x%10+'0'),0);}
	Tp I void writeln(Cn Ty& x){write(x),pc('\n');}
}using namespace FastIO;
Cn int N=3e5+10,p1=19,p2=302627441;
int n,a[N];
struct node{unsigned LL x,y;}pw[N],bs={p1,p2};;
I node operator + (Cn node& x,Cn node& y){return {x.x+y.x,x.y+y.y};}
I node operator * (Cn node& x,CI v){return {x.x*v,x.y*v};}
I node operator * (Cn node& x,Cn node& y){return {x.x*y.x,x.y*y.y};}
I bool operator == (Cn node& x,Cn node& y){return x.x==y.x&&x.y==y.y;}
I bool operator != (Cn node& x,Cn node& y){return !(x==y);}
class SegmentTree{
	private:
		node F[N<<2],G[N<<2];
		#define mid (l+r>>1)
		#define PT CI x=1,CI l=1,CI r=n
		#define LT x<<1,l,mid
		#define RT x<<1|1,mid+1,r
		#define PU(x) (F[x]=F[x<<1]*pw[r-mid]+F[x<<1|1],G[x]=G[x<<1|1]*pw[mid-l+1]+G[x<<1])
	public:
		I void U(CI p,unsigned LL v,PT){
			if(l==r) return void(F[x]=G[x]={v,v});
			p<=mid?U(p,v,LT):U(p,v,RT),PU(x);
		}
		I node QF(CI L,CI R,PT){
			if(L<=l&&r<=R) return F[x];
			if(R<=mid) return QF(L,R,LT);
			if(L>mid) return QF(L,R,RT);
			return QF(L,mid,LT)*pw[R-mid]+QF(mid+1,R,RT);
		}
		I node QG(CI L,CI R,PT){
			if(L<=l&&r<=R) return G[x];
			if(R<=mid) return QG(L,R,LT);
			if(L>mid) return QG(L,R,RT);
			return QG(mid+1,R,RT)*pw[mid-L+1]+QG(L,mid,LT);
		}
}T;
int main(){
	RI i,t;for(read(n),pw[0]={1,1},i=1;i<=n;i++) read(a[i]),pw[i]=pw[i-1]*bs;
	for(i=1;i<=n;T.U(a[i],1),i++) if(t=min(a[i]-1,n-a[i]))
		if(T.QF(a[i]-t,a[i]-1)!=T.QG(a[i]+1,a[i]+t)) return puts("YES"),0;
	return puts("NO"),0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
YbtOJ 794「cdq 分治 整体二分」奇度边集
每加入一条边之后,小 A 都要先判断是否存在一个边集使得所有点度数都是奇数,若存在则求出所有符合要求的边集中 最大边权 的 最小值,若不存在则输出 -1。
yzxoi
2022/09/19
2580
LuoguP2839 [国家集训队]middle
一个长度为 n 的序列 a,设其升序排序之后为 b,那么序列 a 的中位数定义为 b_{\lfloor\frac{n}{2}\rfloor},其中 a,b 从 0 开始标号,除法取下整。
yzxoi
2022/09/19
3210
SP11444 MAXOR - MAXOR & bzoj 2741 【FOTILE模拟赛】L
给定一个长度为 n 的序列 a_i,有 m 个询问,查询一段区间内的子区间的异或和最大值。
yzxoi
2022/09/19
2540
CF679E Bear and Bad Powers of 42
由于在 10^{18} 范围内,42 的幂次只有 12 个,也就是说每次操作三,最多修改 12 次,显然这个复杂度是可以接受的。
yzxoi
2022/09/19
3750
AT2172 [AGC007E] Shik and Travel
你从1号节点出发,走到一个叶子节点。然后每一天,你可以从当前点走到另一个叶子。最后回到1号节点,要求到过所有叶子并且每条边经过恰好两次。
yzxoi
2022/09/19
2780
CF1648D Serious Business
给定一个 3 行 n 列的矩阵,每个位置有权值 a_i,j,初始时除第二行任意位置均不允许通过外第一行第三行均允许通过。
yzxoi
2022/09/19
2060
CF377D Developing Game
有 n 个工人,第 i 个工人的能力是 v_i,他只与能力在 l_i ​到 r_i 之间的人在一起工作,问最多能选出多少人一起工作并输出方案。
yzxoi
2022/09/19
1710
CF377D Developing Game
CF1045G AI robots
给定 N 个点,每个点的位置为 X_i,覆盖半径为 R_i,能覆盖 [X_i-R_i,X_i+R_i],权值为 Q_i,询问能互相覆盖到并且权值之差不大于 K 的点对的数量。
yzxoi
2022/09/19
2510
YbtOJ 664「可持久化数据结构」进制路径
小 A 有一张 n 个点 m 条边的无向图。图中标号为 i 的边可以用一个三元组 (u_i,v_i,x_i) 表示,其中 u_i,v_i 为它的两个端点,长度为 2^{x_i}。
yzxoi
2022/09/19
2990
CF803G Periodic RMQ Problem
一个序列 {a_i} 由 k 个长度为 n 的序列 {b_i} 拼接而成,支持 q 个操作:
yzxoi
2022/09/19
1980
P4587 [FJOI2016]神秘数
一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数。例如S={1,1,1,4,13},
yzxoi
2022/09/16
2840
LuoguP2542 [AHOI2005] 航线规划
给定一个 n 个点 m 条边的无向图,定义 u,v 的关键边为从 u 到 v 的所有路径都必须经过的边,给定 q 个操作:
yzxoi
2022/09/19
2540
P3792 由乃与大母神原型和偶像崇拜
可以考虑记录某个点之前第一个权值相同的数的位置 p_i,然后建到线段树上,维护最大值。
yzxoi
2022/09/19
1800
CF453E Little Pony and Lord Tirek
提雷克会给出 m​ 条指令,每一条都可以被描述为 3 个整数:t_i, l_i, r_i。表示在时间为 t_i 时,提雷克会从区间 [l_i,r_i] 的小马中吸取魔力,指令保证 t 升序,计算每一条指令之后提雷克可以吸取多少点魔力。
yzxoi
2022/09/19
3000
bzoj2122 工作评估
利用空闲时间,BX希望外出工作,工作开始之前,公司就会给BX一个评估值 X_0,之后每天BX的评估值都是根据上一天的评估值和当天公司的运行状况得出,即 X_i=X_{i-1}+D_i,但是每天的评估值有一个上限,也就是说完整的评估公式应该是 X_i=\min{X_i-1+D_i,L_i}。现在BX已经知道了该公司对自己的初始评估值 X_0、公司每天的运行状况 D_i、每天的评估上限 L_i,他的空闲时间是从第 A 天到第 B 天,他希望找到一段时间 i,j (A≤i≤j≤B),使得从第i天开始工作,到第j天结束后的评估值最大。当然如果任意一段时间的工作得到评估值都<初始评估值 X_0,BX可以选择不工作,从而得到最大的评估值。
yzxoi
2022/09/19
2500
bzoj2122 工作评估
AT1984 [AGC001F] Wide Swap
给出一个元素集合为 {1,2,\dots,N}( 1\leq N\leq 500,000)的排列 P,当有 i,j (1\leq i<j\leq N)j-i\geq K (1\leq K\leq N-1) 且 P_{i}-P_{j}==1∣ 时,可以交换 P_{i} 和 P_{j}。
yzxoi
2022/09/19
7780
CF GYM102759 I. Query On A Tree 17
给定一棵以 1​ 为根节点的拥有 N​ 个节点的带点权树,初始时每个点的点权均为 0​,有 Q​ 次操作,每次操作有两种类型:
yzxoi
2022/09/19
5680
YbtOJ 971「fwt」猜拳游戏
有 n=3^m 个人(标号为 0\sim n-1)在玩猜拳。共有 t 轮游戏,每轮游戏都会进行 m 次猜拳。
yzxoi
2022/09/19
2850
P5327 [ZJOI2019]语言
在一个遥远的国度,有 n 个城市。城市之间有 n − 1 条双向道路,这些道路保证了任何两个城市之间都能直接或者间接地到达。
yzxoi
2022/09/28
3190
义乌中学暑假集训 2021.07.13 D
给定 n 个数的序列 {a_i},有 m 组询问,每次询问给定区间 [l,r],问有多少个子区间 [i,j] 满足 a_i,\dots,a_j 中不同的整数的数目是奇数。
yzxoi
2022/09/19
3680
相关推荐
YbtOJ 794「cdq 分治 整体二分」奇度边集
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验