传送门

Luogu

解题思路

发现一个性质:

对于排列的任何一个循环位移,排列中的同一个数的前驱肯定是不变的。

而且,如果一个排列的循环位移是某一个区间的子序列,那么这个循环位移的结尾的 \(n-1\) 级前驱一定要位于这个区间内。

到这里我们就可以倍增维护 \(2^k\) 级祖先,然后再搞一个数据结构维护一下区间最大值就好了。

细节注意事项

  • 咕咕咕

参考代码

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <ctime>
#define rg register
using namespace std;
template < typename T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while (!isdigit(c)) f |= (c == '-'), c = getchar();
while (isdigit(c)) s = s * 10 + (c ^ 48), c = getchar();
s = f ? -s : s;
} const int _ = 200010; int n, m, q, p[_], pre[_], lg[_];
int a[_], las[_], f[22][_], st[22][_]; inline int query(int ql, int qr) {
int x = lg[qr - ql + 1];
return max(st[x][ql], st[x][qr - (1 << x) + 1]);
} int main() {
#ifndef ONLINE_JUDGE
freopen("in.in", "r", stdin);
#endif
read(n), read(m), read(q);
for (rg int i = 2; i <= max(n, m); ++i) lg[i] = lg[i / 2] + 1;
for (rg int i = 1; i <= n; ++i) read(p[i]); p[0] = p[n];
for (rg int i = 1; i <= m; ++i) read(a[i]);
for (rg int i = 1; i <= n; ++i) pre[p[i]] = p[i - 1];
for (rg int i = 1; i <= m; ++i) f[0][i] = las[pre[a[i]]], las[a[i]] = i;
for (rg int j = 1; j <= lg[m]; ++j)
for (rg int i = 1; i <= m; ++i)
f[j][i] = f[j - 1][f[j - 1][i]];
for (rg int i = 1; i <= m; ++i) {
st[0][i] = i;
for (rg int j = 0; j <= lg[n]; ++j)
if ((n - 1) & (1 << j)) st[0][i] = f[j][st[0][i]];
}
for (rg int j = 1; j <= lg[m]; ++j)
for (rg int i = 1; i + (1 << j) - 1 <= m; ++i)
st[j][i] = max(st[j - 1][i], st[j - 1][i + (1 << (j - 1))]);
for (rg int ql, qr, i = 1; i <= q; ++i)
read(ql), read(qr), putchar(query(ql ,qr) >= ql ? '1' : '0');
return 0;
}

完结撒花 \(qwq\)

最新文章

  1. Java概述
  2. ubuntu 14.04 desktop装vnc4server
  3. Jenkins入门系列之——02第二章 Jenkins安装与配置
  4. Xcode playground markdown常用语法
  5. ASP.NET MVC 5 - 给数据模型添加校验器
  6. Linux (Centos)操作MySql命令
  7. GC之详解CMS收集过程和日志分析
  8. MVVMLight Messenging
  9. Linux下怎么运行java程序
  10. 使用EventLog类写Windows事件日志
  11. sql 月初和月末
  12. Java中单态设计模式
  13. NET5 Web应用程序
  14. openSuse使用技巧
  15. 第一章 flume架构介绍
  16. ASP.NET中使用Server.Transfer()方法在页间传值 实例
  17. [LeetCode] Tag Validator 标签验证器
  18. 数据结构树之AVL树(平衡二叉树)
  19. 将excel数据分块多线程导入
  20. Node操作MongoDB并与express结合实现图书管理系统

热门文章

  1. 使用docker布署wordpress
  2. QT5.1+中文乱码问题
  3. vmware Linux虚拟机挂载共享文件夹
  4. Vue - 动态组件 &amp; 异步组件
  5. Flask 教程 第二十一章:用户通知
  6. 2.5 【配置环境】多浏览器驱动 (chrome、IE、Firefox)❀
  7. DFC-3C和DFC-3B的区别和注意事项
  8. GO学习之 从hello.go开始
  9. 迅速看一下jdk8
  10. Springmvc-crud-04错误(路径变量)