捡贝壳
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

lbromine 喜欢在海滩上捡贝壳。海滩可以看作是由 n 个区域连在一起组成的直线,在这片神奇的海滩上最多只会出现四种种类的贝壳,而每个区域都只会出现一种相同种类的贝壳。

lbromine 每天会搜索一段连续的区域来收集全部四种贝壳,但是每天 lbromine 只会在海神当天指定的一段连续的区域内活动,如果他当天收集不到全部的贝壳,他就会非常伤心。

并且海神会在一些天引起海啸,海啸会使得海滩上一段连续区域的贝壳变成一种相同的种类,lbromine 不会在海啸天出门捡贝壳。

现在 lbromine 知道了接下来 m 天海神的指示以及海啸影响的范围,你能告诉他在每个没有海啸的日子里,他最少需要搜索多少个连续的区域才能收集全部四种贝壳吗?

输入描述:

第一行一个正整数 n 表示海滩上有 n 个区域。

第二行 n 个整数,第 i 个整数 a_i\ (1\leq a_i\leq 4) 表示第 i 个区域内只有有第 a_i 种贝壳 。

接下来一行一个正整数 m 表示lbromine 知道了接下来 m 天海神的指示以及海啸影响的范围。

接下来 m 行,每行第一个整数 u\ (u\in[1,2]) 表示这天是否是海啸天。

如果 u=1 ,则表示今天是海啸天,接着三个整数 l,r,x\ (1\leq l\leq r\leq n,1\leq x\leq 4) 表示海啸将会把 [l,r] 区域的贝壳都变成种类 x

如果 u=2 ,则表示今天不是海啸天,接着两个整数 l,r\ (1\leq l\leq r\leq n) 表示海神指示lbromine 这天 只能在 [l,r] 区域活动。

输出描述:

对于每个 u=2 的日子,输出一行一个整数表示lbromine能收集全部四种贝壳最少需要搜索的连续区域数。(如果这天他不能收集到全部的四种贝壳则输出 -1 )
示例1

输入

复制
5
1 2 3 2 4
4
2 1 5
1 4 5 4
2 1 5
2 2 5

输出

复制
5
4
-1

备注:

对于 30\% 的数据,1\leq n,m\leq 5\times 10^3

对于 30\% 的数据,保证没有海啸天(即对于所有天, u=2

对于 100\% 的数据,1\leq n,m\leq 1\times 10^5