#Lutece1928. 帆宝RMQ

帆宝RMQ

Migrated from Lutece 1928 帆宝RMQ

All parts of this problem, including description, images, samples, data and checker, might be broken. If you find bugs in this problem, please contact the admins.

Description

帆宝在某天学习RMQ(Range Minimum/Maximum Query)的过程中突然顿悟领悟RMQ的精髓,发明了带修改RMQ,简称帆宝RMQ,复杂度极其优越。ZinYY想要学习帆宝RMQ,可是他太弱了,甚至连帆宝RBQ也学不会,所以帆宝只能教给他最简单的帆宝RQ(Range Query)

这里定义帆宝RQ为RQ(x)RQ(x),表示数列中最左边xx与最右边xx的下标之差的绝对值,当数列中不存在xxRQ(x)=1RQ(x)=-1

帆宝讲解完算法并留下一道课堂练习题给ZinYY:对于一个长度为nn的给定数列aa,有qq个询问,每种询问有两个类型,类型11是将区间[l,r][l,r]的数都加上xx,类型22是询问RQ(x)RQ(x),并将答案输出

ZinYY听完课还是一脸蒙蔽,你能帮他解决这道课堂练习题吗

Input

第一行包含两个数n,qn,q1n105,1q51041\le n \le 10^5,1\le q \le 5*10^4

第二行包含nn个数a1,a2...ana_1,a_2...a_n,为数列aa,1ai1091\le a_i \le 10^9

接下来qq行,每行有44个数或者22个数

如果一行以11开始,代表类型,输入格式为1,l,r,x1,l,r,x,1lrn,0x1091\le l \le r \le n,0 \le x \le 10^9

如果一行以22开始,代表类型,输入格式为2,x2,x,1x1091\le x \le 10^9

Output

对于每个类型22,输出RQ(x)RQ(x)的值

Samples

4 3
1 2 3 4
1 1 2 1
1 1 1 1
2 3
2
2 3
1 2
1 2 2 1
2 3
2 4
0
-1

Resources

2018 UESTC Training for Data Structures