「CF1142B」Lynyrd Skynyrd
传送门
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\)
「CF1142B」Lynyrd Skynyrd的更多相关文章
- 【CF1142B】Lynyrd Skynyrd
[CF1142B]Lynyrd Skynyrd 题面 洛谷 题解 假设区间\([l,r]\)内有一个循环位移,那么这个循环位移一定有一个最后的点,而这个点在循环位移中再往前移\(n-1\)个位置也一定 ...
- 【题解】CF1142B Lynyrd Skynyrd(倍增)
[题解]CF1142B Lynyrd Skynyrd(倍增) 调了一个小时原来是读入读反了.... 求子段是否存在一个排列的子序列的套路是把给定排列看做置换,然后让给定的序列乘上这个置换,问题就转化为 ...
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- JavaScript OOP 之「创建对象」
工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...
- 「C++」理解智能指针
维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...
- 「JavaScript」四种跨域方式详解
超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...
- 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management
写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...
- 「2014-3-18」multi-pattern string match using aho-corasick
我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...
随机推荐
- this.$nextTick
首先我们先来看看官方介绍的用法: 将回调延迟到下次 DOM 更新循环之后执行.在修改数据之后立即使用它,然后等待 DOM 更新. 它跟全局方法 Vue.nextTick 一样,不同的是回调的 this ...
- 集成Log4Net到自己的Unity工程
需要使用的插件库说明: Loxodon Framework Log4NetVersion: 1.0.0© 2016, Clark Yang=============================== ...
- thinkphp 二级域名绑定模块,导致设置的路由被多域名共用的问题解决方案
问题背景: 在router.php路由配置文件设置了二级域名和路由设置 use think\Route; Route::domain('www','index'); Route::domain('ad ...
- DVWA全级别之CSRF(跨站请求伪造)
CSRF(Cross-site request forgery) CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息( ...
- es 6.x scroll用法
我们可以使用from +size来获取所有数据,但是,如果数据量大的时候,这样的操作开销很大,这时候可以使用scroll操作 1.第一步发起一个scroll 的post请求,带上参数scroll=1m ...
- <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"/>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1, ...
- 【vue】axios + cookie + 跳转登录方法
axios 部分: import axios from 'axios' import cookie from './cookie.js' // import constVal from './cons ...
- 能使Oracle索引失效的七大限制条件
Oracle 索引的目标是避免全表扫描,提高查询效率,但有些时候却适得其反. 例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的.or ...
- electron-vue + element-ui构建桌面应用
最近需要用Node.js做一个桌面的应用,了解到electron可以用来做跨平台的桌面应用,而vue可以用来作为界面的解决方案,研究了一会儿如何把他们两个整合到一起使用,遇到了各种问题而放弃,毕竟作为 ...
- 【经典数据结构】B树与B+树的解释
本文转载自:http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html 前面讲解了平衡查找树中的2-3树以及其实现红 ...