https://codeforces.com/contest/1143/problem/E

题意

p为n的一个排列,给出有m个数字的数组a,q次询问,每次询问a数组区间[l,r]中是否存在子序列为p的循环排列

题解

  • 预处理出值x在排列中的上一个值_p[x]
  • 从左向右扫一遍a数组,维护值x最后出现的地方\(pre[x]\),和每个位置i在排列顺序下前j个数在数组中的位置\(par[i][j]\)(倍增),然后能处理出每个位置i在排列顺序下前n-1个数的位置\(v[i]\)
  • 线段树维护v数组的区间最大值,查询区间v[l,r]>=l即存在

代码

#include<bits/stdc++.h>
#define MAXN 200005
using namespace std;
int n,m,q,p[MAXN],par[MAXN][25],_p[MAXN],a[MAXN],v[MAXN],mx[MAXN<<2],pre[MAXN],l,r;
void build(int o,int l,int r){
if(l==r){mx[o]=v[l];return;}
int mid=(l+r)/2;
build(o<<1,l,mid);build(o<<1|1,mid+1,r);
mx[o]=max(mx[o<<1],mx[o<<1|1]);
}
int qy(int o,int l,int r,int L,int R){
if(L<=l&&r<=R)return mx[o];
int mid=(l+r)/2;
int ans=0;
if(L<=mid)ans=max(ans,qy(o<<1,l,mid,L,R));
if(R>mid)ans=max(ans,qy(o<<1|1,mid+1,r,L,R));
return ans;
}
int main(){
cin>>n>>m>>q;
for(int i=0;i<n;i++)scanf("%d",&p[i]);
for(int i=1;i<=m;i++)scanf("%d",&a[i]);
for(int i=0;i<n;i++)_p[p[i]]=p[(i-1+n)%n];
for(int i=1;i<=m;i++){
int x=pre[_p[a[i]]];
par[i][0]=x;for(int j=1;j<=20;j++)par[i][j]=par[par[i][j-1]][j-1];
int d=n-1,u=i;
for(int j=20;j>=0;j--)if(d>>j&1)u=par[u][j];
v[i]=u;
pre[a[i]]=i;
}
build(1,1,m);
while(q--){
scanf("%d%d",&l,&r);
if(qy(1,1,m,l,r)>=l)printf("1");
else printf("0");
}
}

最新文章

  1. Windows计划任务执行时不显示窗口的问题
  2. Angular(2)
  3. 技术英文单词贴--W
  4. Python Import 详解
  5. Flip Game 分类: POJ 2015-06-15 14:59 22人阅读 评论(0) 收藏
  6. Excel合并单元格数据
  7. CSS学习笔记——CSS中定位的浮动float
  8. 菜鸟学java开篇
  9. 07.31 zepto
  10. 《Java TCP/IP Socket 编程 》读书笔记之十一:深入剖析socket——TCP套接字的生命周期
  11. makefile 学习一
  12. WPF中StackPanel的使用方法
  13. webpack学习笔记(二)-- 初学者常见问题及解决方法
  14. RxJava系列6(从微观角度解读RxJava源码)
  15. Mybatis源码之CallableStatementHandler
  16. JSON对象与字符串间的转化
  17. &lt;c:forEach varStatus=&quot;status&quot;&gt;中 varStatus的作用
  18. 测试工具之Jmeter(使用badboy录制脚本)
  19. 网络编程之Socket的TCP协议实现客户端与客户端之间的通信
  20. utf8_unicode_ci、utf8_general_ci区别

热门文章

  1. sed命令常用用法
  2. svg path 解析
  3. 【MySQL】Mariadb主从复制
  4. Tensorflow faster rcnn系列一
  5. 配置每次git push 不需要输入账号密码
  6. cap理论与分布式事务的解决方案
  7. 使用LocalDateTime计算两个时间的差
  8. 一个比 AutoMapper 更快的模型映射的组件 Mapster
  9. 2019-11-29-WPF-禁用实时触摸
  10. java基于NIO的分散读取文件,然后统一聚合后写入文件