loj#P2507. 「CEOI2011」Matching

「CEOI2011」Matching

题目描述

对于整数序列 (a1,a2,,an)(a_1,a_2,\cdots,a_n)1n1\sim n 的排列 (p1,p2,,pn)(p_1,p_2,\cdots,p_n),称 (a1,a2,,an)(a_1,a_2,\cdots,a_n) 符合 (p1,p2,,pn)(p_1,p_2,\cdots,p_n),当且仅当:

  • {a}\{a\} 中任意两个数字互不相同;
  • (a1,a2,,an)(a_1,a_2,\cdots,a_n) 从小到大排序后,将会得到 (ap1,ap2,,apn)(a_{p_1},a_{p_2},\cdots,a_{p_n})

现在给出 1n1\sim n 的排列 {p}\{p\} 和序列 h1,h2,,hmh_1,h_2,\cdots,h_m,请你求出哪些 {h}\{h\} 的子串符合排列 {p}\{p\}

输入格式

第一行两个空格隔开的正整数 n,mn,m
第二行 nn 个空格隔开的正整数,表示排列 pp
第三行 mm 个空格隔开的正整数,表示序列 hh

输出格式

第一行一个整数 kk,表示符合 {p}\{p\} 的子串个数。
第二行 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

数据范围与提示

对于 35%35\% 的数据,有 n5 000;m20 000n\le 5\ 000;m\le 20\ 000
对于 60%60\% 的数据,有 n50 000;m200 000n\le 50\ 000;m\le 200\ 000
对于 100%100\% 的数据,有 $2\le n\le m\le 1\ 000\ 000;1\le h_i\le 10^9;1\le p_i\le n$,保证 {h}\{h\} 中的元素互不相同,且 {p}\{p\} 是一个排列。