Merge the groups

2.5

6 votes
Data Structures, Disjoint Data Structures, Disjoint Set, Disjoint set, Hard
Problem

You are given an array A of N elements. Each element belongs to its own group initially.

You need to process the following two types of queries:

1  X  Y - The array elements which are  at positions  X and Y in the array  A  merge their group.
2  X - Print the maximum absolute difference of the array values that belong to the group of Xth element of the array.

Note: It is possible that the elements X and Y in the query of type 1 already be in the same group. You need to simply ignore that query.

Input
The first line contains an integer N as input that denotes the total number of elements of the array. The next line contains N space separated integers that denote the elements of that array.
The next line of input contains an integer Q that denotes the total number of queries. 
The next Q lines contain description of each query.
The description of each query begins with an integer type which is 1 for 1st type of queries and 2 for second type of queries.

Output
For each query of type 2, print the answer in a new line.

Constraints:

Subtask 1: 50 Points

1N103

|A[i]|103

1Q103

1X,YN

Subtask 2: 50 Points

1N106

|A[i]|109

1Q5105

1X,YN

Time Limit: 1
Memory Limit: 256
Source Limit:
Explanation

Query 1: 4th element is alone in group, So maximum absolute difference will be 0. ([5], [3], [2], [9]).

Query 2: 1st and 4th element will join to form a group. ([5, 9], [3], [2], [5, 9]).

Query 3: 4th element had formed a group with 1st element [5,9]. So maximum absolute difference will be 4 (as 9-5=4). ([5, 9], [3], [2], [5, 9])

Query 4: 3rd element is alone in group. So maximum absolute difference will be 0. ([5, 9], [3], [2], [5, 9]).

Editor Image

?