CF1142B Lynyrd Skynyrd

题目
有两种做法:
第一种是\(nlog^2\ n\)
我们从前往后处理出\(a\)数组中每个数在\(p\)数组中的前驱的最后出现位置\(lst\)
那么每个数往前跳几次\(lst\),也就会对应排列\(p\)中的一段连续子串。
然后处理往前跳\(lst\)的倍增数组。
我们知道,\(p\)是一个循环排列,所以对于每个数,以这个数结束的最短的是\(p\)的循环移位的\(a\)的子序列,就是从这个数往前跳\(n-1\)\(lst\)得到的子序列。
所以我们处理出每个点往前跳\(n-1\)\(lst\)得到的位置\(edp\),显然这个数组时单调不降的。
对于一次询问\(l,r\),如果\(l,r\)中存在子序列为\(p\)的循环移位,那么就会满足\(\exist i\in[l,r],edp_i\in[l,r]\)
因为\(edp_i\le i\)\(edp\)单调不降,所以这个条件可以转化为\(edp_r\ge l\)

猜你喜欢

转载自www.cnblogs.com/cjoierShiina-Mashiro/p/11527122.html