CF1142E/1143B Lynyrd Skynyrd】的更多相关文章

CF1142E/1143B Lynyrd Skynyrd 开始读错题了,以为是连续的一段,敲完后才发现是 \(subsequence\) ... 考虑对于 \(a\) 中的每个 \(a_i\) 找到它在排列 \(p\) 中的下一个元素的最左位置 \(j\) ,从 \(i\) 到 \(j\) 连一条边,这样就形成了一个森林. 然后 \(dfs\) 遍历一下,用一个栈来存储当前在路径中的点,若当前节点为 \(u\) ,而路径长 \(\geq n\) ,说明路径中从 \(u\) 开始的 \(n\) 个…
[CF1142B]Lynyrd Skynyrd 题面 洛谷 题解 假设区间\([l,r]\)内有一个循环位移,那么这个循环位移一定有一个最后的点,而这个点在循环位移中再往前移\(n-1\)个位置也一定在这个区间中. 那么我们将每一个点在它所在循环位移中前挪\(n-1\)个位置记下来,判断一下\([l,r]\)中是否有\(\geq l\)的点即可(具体实现详见代码). 代码 #include <iostream> #include <cstdio> #include <cstd…
[题解]CF1142B Lynyrd Skynyrd(倍增) 调了一个小时原来是读入读反了.... 求子段是否存在一个排列的子序列的套路是把给定排列看做置换,然后让给定的序列乘上这个置换,问题就转化为最长上升序列.这是因为一个数的前驱后继是唯一的. 这一题稍微改变了一下,我们要求的是类似于\(4\quad 5\quad1\quad 2 \quad 3\)的子序列.就相当于给1添了个前驱n,给\(n\)添了个后继\(1\),本质还是一样的,仍然是一个数的前驱后继是唯一的. 原本1,m没有额外关系时…
更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description Recently Lynyrd and Skynyrd went to a shop where Lynyrd bought a permutation \(p\) of length \(n\), and Skynyrd bought an array \(a\) of length \(m\), consisting of integers from \(1\) to…
传送门: 题意:给出 n,m,q 然后给出模板串,从1-n数字只出现一次,然后给出长度为m的要询问的串. q组询问:每组询问输出 ‘1’或者‘0’ 每组询问 一对x,y    问在x到y中有没有模板串通过循环移动得到的串 (2,1,3)--> (3,2,1)-->(1,3,2) 题解:我们在给出的模板串时,标记这个数字出现的位置. 然后做一个1-m的循环 去找 每个数字的前缀连起来. #include <bits/stdc++.h> using namespace std; #de…
---恢复内容开始--- 题意:给你一个排列p和数组a,有t组询问,每次询问一个区间的子序列中是否有p的一个循环排列. 思路:以p = [3, 1, 2]举例, 我们扫描数组b,假设当前数字是1,那么我们找前面离现在最近的3的位置,然后连一条边.为什么只连最近的呢?比如[3,3,1,2]这种情况,1只需要和第二个3连就行了,因为连第一个3的这种情况已经被连第二个3的这种情况包含了.那么对于每个点,我们可以找到通过连的边走n - 1次所到的点,所有包含这个区间的询问区间都有一个合法的循环排列.但是…
题目 有两种做法: 第一种是\(O(nlog\ n)\)的. 我们预处理两个数组: \(pre_i\)表示\(p\)中\(i\)前面的那个数是\(pre_i\). \(lst_i\)表示\(a\)中\(a_i\)前一个\(pre_{a_i}\)的位置.(代码中是\(f_0\)) 那么每个数往前跳几次\(lst\),也就会对应排列\(p\)中的一段连续子串. 然后处理往前跳\(lst\)的倍增数组. 我们知道,\(p\)是一个循环排列,所以对于每个数,以这个数结束的最短的是\(p\)的循环移位的\…
传送门 Luogu 解题思路 发现一个性质: 对于排列的任何一个循环位移,排列中的同一个数的前驱肯定是不变的. 而且,如果一个排列的循环位移是某一个区间的子序列,那么这个循环位移的结尾的 \(n-1\) 级前驱一定要位于这个区间内. 到这里我们就可以倍增维护 \(2^k\) 级祖先,然后再搞一个数据结构维护一下区间最大值就好了. 细节注意事项 咕咕咕 参考代码 #include <algorithm> #include <iostream> #include <cstring…
今天试图用typora写题解 真开心 参考 你会发现有很多都是参考的..zblzbl Codeforces Round #549 (Div. 1) 最近脑子不行啦 需要cf来缓解一下 A. The Beatles 这道题就是枚举啦 有两种步长 试一下就好了 如果你的步长是x 那么要跳的次数就是距离除以步长 \[ \frac{n * k * x}{gcd(n * k, x)} \div x = \frac{n * k}{gcd(n * k, x)} \] #include <cmath> #in…
The Doors +0 找出输入的01数列里,0或者1先出完的的下标. Nirvana +3 输入n,求1到n的数字,哪个数逐位相乘的积最大,输出最大积. 思路是按位比较,从低到高,依次把小位换成全9,判断一下.细节上容易出错,比如边界和减一的情况.要多加小心. Queen +0 给一棵树,删除树中一些点,这些点的\(C_i\)权值是1,且直接的孩子也也是1.从小到大依次输出删除的编号. 中间我以为是所有子孙的权值都要是1,幸好发现了. The Beatles /+0 给一个\(n \cdot…