C1853 [Contest #13]蓬莱的弹枝-七色的弹幕

内存限制:256 MB 时间限制:4000 ms

题目描述

给一个长为 $n$ 的序列 $a_1, a_2, ..., a_n$,和 $q$ 次操作,操作有三种:

  1. 给定 $l,r$,对区间 $[l,r]$ 进行一次左移操作,即 $a_i=a_{i+1}~(l \le i < r), a_r=a_l$。

  2. 给定 $l,r$,给区间 $[l,r]$ 中的所有元素加一。

  3. 给定 $x$,求离 $a_x$ 最近且与 $a_x$ 值相等的数到 $a_x$ 的距离 (两个数的距离定义为下标差的绝对值),如果不存在其他与 $a_x$ 相等的数则输出 $-1$。

输入格式

第一行两个整数 $n,q~(1\le n,q \le 10^5)$,分别表示序列长度和询问个数。

接下来一行 $n$ 个整数 $a_1, a_2, \cdots, a_n~(1 \le a_i \le 10^5)$,表示给定的序列。

接下来 $q$ 行,每行的第一个整数 $op~(op \in \lbrace 1, 2, 3\rbrace)$ 表示当前操作的种类:

  1. 当 $op = 1$ 时,接下来输入两个整数 $l,r~(1 \le l < r \le n)$,表示一次左移操作

  2. 当 $op = 2$ 时,接下来输入两个整数 $l,r~(1 \le l \le r \le n)$,表示一次区间加一操作

  3. 当 $op = 3$ 时,接下来输入一个整数 $x~(1 \le x \le n)$,表示一次询问

输出

输出若干行,每行一个整数,表示一次询问的答案。

样例

样例输入 1

5 5 2 1 2 1 2 3 2 1 2 4 3 5 2 2 3 3 4

样例输出 1

2 3 -1

提示