CF2043G Problem with Queries
Description
You are given an array $ a $ , consisting of $ n $ integers. Your task is to process $ q $ queries of two types:
- $ 1~p~x $ — set the value of the element at index $ p $ equal to $ x $ ;
- $ 2~l~r $ — count the number of pairs of indices $ (i, j) $ such that $ l \le i < j \le r $ and $ a_i \ne a_j $ .
Note that the queries in this task are encoded; each subsequent query can only be decoded after calculating the answer to the preceding query of the second type.
Input Format
The first line contains a single integer $ n $ ( $ 1 \le n \le 10^5 $ ).
The second line contains $ n $ integers $ a_1, a_2, \dots, a_n $ ( $ 1 \le a_i \le n $ ).
The third line contains a single integer $ q $ ( $ 1 \le q \le 3 \cdot 10^5 $ ) — the number of queries.
The next $ q $ lines describe the queries in one of the following formats:
- $ 1~p'~x' $ ( $ 0 \le p', x' \le n-1 $ );
- $ 2~l'~r' $ ( $ 0 \le l', r' \le n-1 $ ).
The queries are encoded as follows: let $ \mathit{last} $ be the answer to the latest processed query of the second type (initially, $ \mathit{last} = 0 $ ).
- if the type of the query is $ 1 $ , then $ p = ((p' + \mathit{last}) \bmod n) + 1 $ , $ x = ((x' + \mathit{last}) \bmod n) + 1 $ .
- if the type of the query is $ 2 $ , $ l = ((l' + \mathit{last}) \bmod n) + 1 $ , $ r = ((r' + \mathit{last}) \bmod n) + 1 $ . If $ l > r $ , swap their values.
Don't forget to update the value of $ \mathit{last} $ after answering each query of the second type.
Additional constraint on the input: there is at least one query of the second type.
Output Format
For each query of the second type, print the answer — the number of pairs of indices $ (i, j) $ such that $ l \le i < j \le r $ and $ a_i \ne a_j $ .
Explanation/Hint
In the first example, the actual queries (after decoding) are:
- 2 1 3
- 1 1 3
- 2 1 3
- 1 2 3
- 2 1 3