bzoj 2124 等差子序列 (线段树维护hash)
2124: 等差子序列
Time Limit: 3 Sec Memory Limit: 259 MB
Submit: 1922 Solved: 714
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
3
1 3 2
3
3 2 1
Sample Output
Y
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define mid ll m = (l + r) >> 1
const ll M = 1e5+;
const ll md = 1e9+;
ll suml[M<<],sumr[M<<],a[M],pw[M];
void pushup(ll l,ll r,ll rt){
ll len = r - l + ;
ll m = len / ;
suml[rt] = (suml[rt<<]*pw[m]+suml[rt<<|])%md;
sumr[rt] = (sumr[rt<<|]*pw[len-m]+sumr[rt<<])%md;
return ;
} void update(ll p,ll l,ll r,ll rt){
if(l == r){
suml[rt] = sumr[rt] = ;
return ;
}
mid;
if(p <= m) update(p,lson);
else update(p,rson);
pushup(l,r,rt);
} ll queryl(ll L,ll R,ll l,ll r,ll rt){
if(L > R) return ;
if(L == l&&R == r) return suml[rt];
mid;
if(L > m) return queryl(L,R,rson);
else if(R <= m) return queryl(L,R,lson);
else return (queryl(L,m,lson)*pw[R-m]+queryl(m+,R,rson))%md;
} ll queryr(ll L,ll R,ll l,ll r,ll rt){
if(L > R) return ;
if(L == l&&R == r) return sumr[rt];
mid;
if(L > m) return queryr(L,R,rson);
else if(R <= m) return queryr(L,R,lson);
else return (queryr(L,m,lson)+queryr(m+,R,rson)*pw[m-L+])%md;
} int main()
{
ll t,n;
ios::sync_with_stdio();
cin.tie(); cout.tie();
cin>>t;
pw[] = ;
for(ll i = ;i <= ;i++)
pw[i] = (pw[i-]*)%md;
while(t--){
cin>>n;
memset(suml,,sizeof(suml));
memset(sumr,,sizeof(sumr));
memset(a,,sizeof(a));
ll flag = ;
for(ll i = ;i <= n;i ++) cin>>a[i];
for(ll i = ;i <= n;i ++){
ll len = min(a[i]-,n-a[i]);
ll t1 = queryl(a[i]-len,a[i]-,,n,);
ll t2 = queryr(a[i]+,a[i]+len,,n,);
if(t1!=t2){
flag = ;break;
}
update(a[i],,n,);
}
if(!flag) cout<<"Y"<<endl;
else cout<<"N"<<endl;
}
}
bzoj 2124 等差子序列 (线段树维护hash)的更多相关文章
- BZOJ 2124: 等差子序列 线段树维护hash
2124: 等差子序列 Description 给一个1到N的排列{Ai},询问是否存在1<=p1=3),使得Ap1,Ap2,Ap3,…ApLen是一个等差序列. Input 输入的第一行包含一 ...
- BZOJ 2124等差子序列 线段树&&hash
[题目描述 Description] 给一个 1 到 N 的排列{Ai},询问是否存在 1<=p1<p2<p3<p4<p5<…<pLen<=N(Len& ...
- bzoj2124: 等差子序列线段树+hash
bzoj2124: 等差子序列线段树+hash 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2124 思路 找大于3的等差数列其实就是找等于 ...
- BZOJ 2124: 等差子序列
Sol 线段树+Hash. 首先暴力 等差子序列至少3项就可以了,就枚举中项,枚举公差就可以了,只需要一个数在中项前出现,另一个数在中项前没出现过就可以了.复杂度 \(O(n^2)\) 然后我想了一个 ...
- cf213E 线段树维护hash
链接 https://codeforces.com/contest/213/problem/E 题目大意 给出两个排列a.b,长度分别为n.m,你需要计算有多少个x,使 得\(a_1 + x; a_2 ...
- MemSQL Start[c]UP 2.0 - Round 1 F - Permutation 思维+线段树维护hash值
F - Permutation 思路:对于当前的值x, 只需要知道x + k, x - k这两个值是否出现在其左右两侧,又因为每个值只有一个, 所以可以转换成,x+k, x-k在到x所在位置的时候是否 ...
- BZOJ2124:等差子序列(线段树,hash)
Description 给一个1到N的排列{Ai},询问是否存在1<=p1<p2<p3<p4<p5<…<pLen<=N (Len>=3), 使得A ...
- [bzoj2124]等差子序列——线段树+字符串哈希
题目大意 给一个1到N的排列\(A_i\),询问是否存在\(p_i\),\(i>=3\),使得\(A_{p_1}, A_{p_2}, ... ,A_{p_len}\)是一个等差序列. 题解 显然 ...
- bzoj 4184: shallot (线段树维护线性基)
题面 \(solution:\) 这一题绝对算的上是一道经典的例题,它向我们诠释了一种新的线段树维护方式(神犇可以跳过了).像这一类需要加入又需要维护删除的问题,我们曾经是遇到过的像莫对,线段树... ...
随机推荐
- appium移动自动化测试---api键盘操作
模拟键盘输入也是非常重要的操作.这一小节来介绍那些关于键盘的操作. 1.sendKeys()方法 方法: sendKeys() 用法: driver.findElements(By.name(&quo ...
- flask入门补充
在上篇文章提到了json的编码问题.那么Flask是国外开发的框架,没有考虑到中文编码,那么我们就需要自己配置 那么在访问页面的时候会有 get 请求和post 请求.在下边我也会提到.以及没有接触 ...
- 傻瓜式搭建私有云就用这两组合:宝塔+kodexplorer
介绍 宝塔面板:是一款linux/windows平台均可使用的服务器管理软件,自带环境包,主要基于centos操作系统,可一键包装nginx.apache.php.mysql.pureftpd.php ...
- 基于Ubuntu+kodexplorer可道云的私有云网盘
1.可用的服务器:组装PC机一台,操作系统为Ubuntu 14.04 LTS,无桌面环境,放在机房,使用远程终端进行访问.有安装了Apache2,运行着svn服务.内网IP地址为192.168.0.1 ...
- Linux系列——安装双系统Ubuntu
作为一个穷人,电脑破得不行却没钱换,怎么办呢,不如换个Ubuntu吧,没有Windows那么多后台应用,在我这台古董上稍微流畅一点. Linux有很多发行版,比较流行和适合入门的就是Ubuntu和De ...
- slotting filter笔记
1.slot filling是为了让用户的意图转化为明确的指令而补全信息的过程. 2.准入条件 从一个开放域转入到封闭域,或者从一个封闭域转入到另一个封闭域,中间的跳转是需要逻辑判断的,而这个逻辑判断 ...
- mysql添加一个字段(
mysql添加一个字段(在指定的一个字段后面) 举个栗子:alter table inquiry add error_code varchar(3) after add_time; 说明:alter ...
- 虚拟机搭建Hadoop集群
安装包准备 操作系统:ubuntu-16.04.3-desktop-amd64.iso 软件包:VirtualBox 安装包:hadoop-3.0.0.tar.gz,jdk-8u161-linux-x ...
- axios常用操作
axios常用操作 一:函数化编程 1:编写可复用的方法 axios(config)的方法中,有必须的url参数和非必须的options参数.所以我们可以先写一个接受这两个参数的方法,在这个方法中我们 ...
- maven实战读书笔记(二)
一个Spring加载属性的工具类,指定目标位置之后可以用${}的方式加载配置文件 测试maven工程发送email的例子:运行成功的例子—github 常用的命令: mvn clean compile ...