bzoj#P2384. [Ceoi2011]Match

[Ceoi2011]Match

题目描述

作为新一轮广告大战的一部分,格丁尼亚的一家大公司准备在城市的某处设置公司的标志(logo)。公司经理决定用一些整栋的建筑来构成标志的组成部分。

标志由不同高度的竖直条纹组成。这些条纹从左到右依次编号为 1n1\dots n。标志用数字 1,2,,n1,2,\dots,n 的排列(s1,s2,,sn)(s_1,s_2,\dots,s_n) 来描述。编号 s1s_1 的条纹高度最低,编号 s2s_2 的条纹第二低……编号 sns_n 的条纹最高。条纹的实际高度无关紧要。

沿格丁尼亚城市的主干道共有 mm 栋建筑,这些建筑的高度各不相同。问题是如何找出标志与建筑相匹配的所有位置。

请帮助公司找出匹配标志的建筑序列的连续部分。若编号 s1s_1 的建筑在序列中最低,编号 s2s_2 的建筑在序列中第二低……那么这个连续的建筑序列就与标志匹配。例如,建筑高度的序列 5,10,45,10,4 与用编号排列 (3,1,2)(3,1,2) 描述的标志相匹配,因为编号 33 的建筑(高度 44)最低,编号 11 的建筑第二低,编号 22 的建筑最高。

输入格式

第一行包含两个整数 n,m(2nm106)n,m(2\le n\le m\le 10^6)

第二行包含 nn 个整数 sis_i,构成 1,2,,n1,2,\dots,n 的排列,1sin1\le s_i\le nsisjs_i\ne s_j

第三行包含 mm 个整数 hih_i,表示建筑的高度 (1hi109,1im)(1\le h_i\le 10^9,1\le i\le m),所有的 hih_i 均不相同。

每一行的整数之间用单个空格隔开。

输出格式

第一行包含一个整数 kk,表示匹配的序列数目。

第二行包含 kk 个整数,分别为在正确匹配的每个序列中与标志编号 11 的条纹相对应的第一栋建筑的编号。这些数字按升序排列,用空格隔开。如果 k=0k=0,第二行为空行。

样例输入

5 10
2 1 5 3 4
5 6 3 8 12 7 1 10 11 9

样例输出

2
2 6

样例说明

数据规模与约定

至少 3535 分的数据,n5×103,m2×103n\le 5\times 10^3, m\le 2\times 10^3

至少 6060 分的数据,n5×104,m2×105n\le 5\times 10^4, m\le 2\times 10^5

对于所有数据,有 2nm1062\le n\le m\le 10^61hi1091\le h_i\le 10^9