D. Find the Different Ones!

time limit per test

5 seconds

memory limit per test

256 megabytes

You are given an array a of n integers, and q queries.

Each query is represented by two integers l and r (1≤l≤r≤n). Your task is to find, for each query, two indices i and j (or determine that they do not exist) such that:

  • l≤i≤r;
  • l≤j≤r;
  • ai≠aj.

In other words, for each query, you need to find a pair of different elements among al,al+1,...,ar, or report that such a pair does not exist.

Input

The first line of the input contains a single integer t (1≤t≤104) --- the number of test cases. The descriptions of the test cases follow.

The first line of each test case contains a single integer n (2≤n≤2⋅105) --- the length of the array a.

The second line of each test case contains n integers a1,a2,...,an (1≤ai≤106) --- the elements of the array a.

The third line of each test case contains a single integer q (1≤q≤2⋅105) --- the number of queries.

The next q lines contain two integers each, l and r (1≤l<r≤n) --- the boundaries of the query.

It is guaranteed that the sum of the values of n across all test cases does not exceed 2⋅105. Similarly, it is guaranteed that the sum of the values of q across all test cases does not exceed 2⋅105.

Output

For each query, output two integers separated by space: i and j (l≤i,j≤r), for which ai≠aj. If such a pair does not exist, output i=−1 and j=−1.

You may separate the outputs for the test cases with empty lines. This is not a mandatory requirement.

Example

Input

Copy

复制代码

5

5

1 1 2 1 1

3

1 5

1 2

1 3

6

30 20 20 10 10 20

5

1 2

2 3

2 4

2 6

3 5

4

5 2 3 4

4

1 2

1 4

2 3

2 4

5

1 4 3 2 4

5

1 5

2 4

3 4

3 5

4 5

5

2 3 1 4 2

7

1 2

1 4

1 5

2 4

2 5

3 5

4 5

Output

Copy

复制代码
2 3
-1 -1
1 3

2 1
-1 -1
4 2
4 6
5 3

1 2
1 2
2 3
3 2

1 3
2 4
3 4
5 3
5 4

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

解题说明:此题是一道模拟题,可以采用动态规划算法,假设next_diff[i] 等于 i的左边第一个与arr[i]不一样的点的下标。如果 arr[i]!=arr[i-1] , next_diff[i]=i-1; 否则 next_diff[i]=next_diff[i-1];

如果,第i个数与第i-1个数不一样,记录这个不一样的地方的开端:i-1

如果i+1还是不一样的话,那么记录不一样的开端:i

如果后面都一样,那么后面都等于 i

如果区间[l,r] 之间所有数都一样,那么 next_diff[l]=next_diff[r]

否则,我们只要输出 r 和next_diff[r]即可

cpp 复制代码
#include <stdio.h>

int main()
{
	int t;
	scanf("%d", &t);
	while (t--) 
	{
		int n, q;
		scanf("%d", &n);
		int arr[200005], next_diff[200005];
		for (int i = 0; i < n; i++)
		{
			scanf("%d", &arr[i]);
		}
		next_diff[n - 1] = n;
		for (int i = n - 2; i >= 0; i--) 
		{
			if (arr[i] == arr[i + 1])
			{
				next_diff[i] = next_diff[i + 1];
			}
			else
			{
				next_diff[i] = i + 1;
			}
		}

		scanf("%d", &q);
		while (q--)
		{
			int l, r;
			scanf("%d %d", &l, &r);
			l--; 
			r--;
			if (next_diff[l] > r)
			{
				printf("-1 -1\n");
			}
			else
			{
				printf("%d %d\n", l + 1, next_diff[l] + 1);
			}
		}
	}
	return 0;
}
相关推荐
数据皮皮侠8 分钟前
2285 上市公司组织衰退程度【Dec】2010-2024
大数据·人工智能·算法·制造
daxi1509 分钟前
C语言从入门到进阶——第17讲:字符串函数
c语言·开发语言·算法·蓝桥杯
wljy113 分钟前
第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(个人见解,已完结)
c语言·c++·算法·蓝桥杯
CoderCodingNo15 分钟前
【GESP】C++八级考试大纲知识点梳理 (7) 算法的时间和空间效率分析
开发语言·c++·算法
青瓷程序设计20 分钟前
基于YOLO的安全帽佩戴检测系统~Python+模型训练+2026原创+YOLO算法
python·算法·yolo
Trouvaille ~21 分钟前
【优选算法篇】拓扑排序——逻辑先后与任务依赖的终极拆解
数据结构·c++·算法·leetcode·青少年编程·蓝桥杯·拓扑学
T1an-124 分钟前
博乐科技笔试题
科技·算法
XiYang-DING29 分钟前
【LeetCode】118.杨辉三角
算法·leetcode·职场和发展
wuhen_n36 分钟前
排列算法完全指南 - 从全排列到N皇后,一套模板搞定所有排列问题
前端·javascript·算法
ai生成式引擎优化技术40 分钟前
拓世网络技术开发工作室的ts概率递推ai工程应用技术GEOChatGPT,不同用户账号信息,网站引用效果
算法