[BZOJ2124]等差子序列/[CF452F]Permutation

题目大意:

一个\(1\sim n\)的排列\(A_{1\sim n}\),询问是否存在\(i,j(i<j)\),使得\(A_i<A_j\)且\(\frac{A_i+A_j}2\)在\(i,j\)之间出现。

BZOJ上的数据范围:\(n\le10000\);

CF上的数据范围:\(n\le3\times10^5\)。

思路:

从左到右枚举每一个数,用两个布尔数组\(b_0,b_1\)分别维护数值为\(i\)的数是否在当前数的左边、右边出现。然后将与当前数差值相等的位置对应起来(如,当前\(A_i=3\)时,将\(b_{0,1}\)与\(b_{1,5}\)对应起来),看一下对应位置有没有都是\(1\)的,如果有,则说明存在。

使用bitset优化可以做到\(\mathcal O(\frac{n^2}{32})\),但还是过不了。

发现如果只用一个数组\(b\)维护左边出现过的数,那么对于当前位置\(i\),若以\(b_{A_i}\)为中心的极大字符串是不是回文串,说明一个在左边出现,一个在右边出现,那么一定存在解。而确定中心的回文串判定可以用树状数组维护哈希实现。

事件复杂度\(\mathcal O(n\log n)\)。

源代码:

#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
const int N=300001;
const unsigned base=13;
unsigned pwr[N];
int n;
class FenwickTree {
private:
unsigned val[N];
int lowbit(const int &x) const {
return x&-x;
}
unsigned query(const int &p) const {
unsigned ret=0;
for(register int i=p;i;i-=lowbit(i)) {
ret+=val[i]*pwr[p-i];
}
return ret;
}
public:
void modify(const int &p) {
for(register int i=p;i<=n;i+=lowbit(i)) {
val[i]+=pwr[i-p];
}
}
unsigned query(const int &l,const int &r) const {
return query(r)-query(l-1)*pwr[r-l+1];
}
};
FenwickTree t[2];
int main() {
n=getint();
for(register int i=pwr[0]=1;i<=n;i++) {
pwr[i]=pwr[i-1]*base;
}
bool ans=false;
for(register int i=1;i<=n;i++) {
const int x=getint();
const int len=std::min(x-1,n-x);
ans|=t[0].query(x-len,x-1)!=t[1].query(n-x-len+1,n-x);
t[0].modify(x);
t[1].modify(n-x+1);
}
puts(ans?"YES":"NO");
return 0;
}

[BZOJ2124]等差子序列/[CF452F]Permutation的更多相关文章

  1. bzoj2124: 等差子序列线段树+hash

    bzoj2124: 等差子序列线段树+hash 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2124 思路 找大于3的等差数列其实就是找等于 ...

  2. BZOJ2124 等差子序列(树状数组+哈希)

    容易想到一种暴力的做法:枚举中间的位置,设该位置权值为x,如果其两边存在权值关于x对称即合法. 问题是如何快速寻找这个东西是否存在.考虑仅将该位置左边出现的权值标1.那么若在值域上若关于x对称的两权值 ...

  3. [bzoj2124]等差子序列_线段树_hash

    等差子序列 bzoj-2124 题目大意:给定一个1~n的排列,问是否存在3个及以上的位置上的数构成连续的等差子序列. 注释:$1\le n\le 10^4$. 想法:这题就相当于是否存在3个数i,j ...

  4. [bzoj2124]等差子序列(hash+树状数组)

    我又来更博啦     2124: 等差子序列 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 941  Solved: 348[Submit][Statu ...

  5. bzoj2124 等差子序列(hash+线段树)

    2124: 等差子序列 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 719  Solved: 261[Submit][Status][Discuss] ...

  6. BZOJ2124:等差子序列(线段树,hash)

    Description 给一个1到N的排列{Ai},询问是否存在1<=p1<p2<p3<p4<p5<…<pLen<=N (Len>=3), 使得A ...

  7. BZOJ2124: 等差子序列(树状数组&hash -> bitset 求是否存在长度为3的等差数列)

    2124: 等差子序列 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 2354  Solved: 826[Submit][Status][Discuss ...

  8. BZOJ2124: 等差子序列

    题意:给一个 1 到 N 的排列{Ai},询问是否存在 1<=p1<p2<p3<p4<p5<…<pLen<=N(Len>=3),使得 Ap1,Ap ...

  9. [bzoj2124]等差子序列——线段树+字符串哈希

    题目大意 给一个1到N的排列\(A_i\),询问是否存在\(p_i\),\(i>=3\),使得\(A_{p_1}, A_{p_2}, ... ,A_{p_len}\)是一个等差序列. 题解 显然 ...

随机推荐

  1. docker 原理

    docker项目的目标是实现轻量级的操作系统虚拟化,Docker的基础是Linux容器(LXC)等技术. 在LXC的基础上,Docker做了进一步的封装,让用户不关心容器的管理,使得操作更为简单.用户 ...

  2. C语言复习---用筛选法求100之内的素数

    #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int i, j; ] ...

  3. 介绍C++11标准的变长参数模板

    目前大部分主流编译器的最新版本均支持了C++11标准(官方名为ISO/IEC14882:2011)大部分的语法特性,其中比较难理解的新语法特性可能要属变长参数模板(variadic template) ...

  4. Linux - awk 文本处理工具六 - 日志关键字筛选

    查看多少行 ? awk '{print NR}' access.log |tail -n1 日期时间筛选检测 awk '/Dec 10/ {print $0}' /opt/mongod/log/mon ...

  5. 深入浅出js事件

    深入浅出js事件 一.事件流 事件冒泡和事件捕获分别由微软和网景公司提出,这两个概念是为了解决页面中事件流(事件发生顺序)的问题. <div id="outer"> & ...

  6. Android 7.0 行为变更

    Android 7.0 除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更.本文重点介绍您应该了解并在开发应用时加以考虑的一些主要变更. 如果您之前发布过 Android 应用,请注意 ...

  7. Java编程的逻辑 (65) - 线程的基本概念

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  8. Select查询语句1

    一.语法结构 select[all|distinct]select_list from table_name[join join_condition] where search_condition g ...

  9. JS框架图

    一.JS框架

  10. Top 10 Best Free Netflow Analyzers and Collectors for Windows

    https://www.pcwdld.com/best-free-netflow-analyzers-and-collectors-for-windows https://blog.csdn.net/ ...