KGSS - Maximum Sum

Tags: segment-tree, data-structure

Problem

https://vn.spoj.com/problems/KGSS

https://oj.vnoi.info/problem/KGSS

You are given a sequence A[1], A[2], …, A[N] ( 0 ≤ A[i] ≤ 10^8 , 2 ≤ N ≤ 10^5 ). There are two types of operations and they are defined as follows:

Update:

This will be indicated in the input by a ‘U’ followed by space and then two integers i and x.

U i x, 1 ≤ i ≤ N, and x, 0 ≤ x ≤ 10^8.

This operation sets the value of A[i] to x.

Query:

This will be indicated in the input by a ‘Q’ followed by a single space and then two integers i and j.

Q x y, 1 ≤ x < y ≤ N.

You must find i and j such that x ≤ i, j ≤ y and i != j, such that the sum A[i]+A[j] is maximized. Print the sum A[i]+A[j].

Input

The first line of input consists of an integer N representing the length of the sequence. Next line consists of N space separated integers A[i]. Next line contains an integer Q, Q ≤ 10^5, representing the number of operations. Next Q lines contain the operations.

Output

Output the maximum sum mentioned above, in a separate line, for each Query.

Example

Input
5
1 2 3 4 5
6
Q 2 4
Q 2 5
U 1 6
Q 1 5
U 1 7
Q 1 5

Output
7
9
11
12

Warning: large Input/Output data, be careful with certain languages

Submit solution!


Tutorial

Bài này sử dụng segment tree, mỗi node của segment tree lưu lại chỉ số và giá trị của phần tử lớn nhất trên đoạn của node quản lý. Về việc tìm hai index mà tổng lớn nhất, ta tìm thằng lớn nhất, rồi tìm thằng lớn nhì bằng cách tìm thằng lớn nhất từ 2 đoạn con được tạo ra sau khi loại bỏ thằng lớn nhất.

Độ phức tạp: O(NlogN + QlogN)


Submission