Problem: 2063B - Subsequence Update
Language: java

Solution 1 (runtime: 343 ms):
import java.util.*;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();  // number of test cases
        while (t-- > 0) {
            // Read n, l, r
            int n = sc.nextInt();
            int l = sc.nextInt();  // 1-based index
            int r = sc.nextInt();  // 1-based index

            // Read array arr
            long[] arr = new long[n + 1];  // Using long[] for larger values, and n+1 to handle 1-based indexing
            for (int i = 1; i <= n; i++) {
                arr[i] = sc.nextLong();
            }

            // Step 1: Calculate the sum for the range [l, r]
            long initialSum = 0;
            for (int i = l; i <= r; i++) {
                initialSum += arr[i];
            }
            long min = initialSum;  // Store the initial sum as the minimum

            // Step 2: Find the smallest `r - l + 1` elements from [1, r]
            List<Long> prefix = new ArrayList<>();
            for (int i = 1; i <= r; i++) {
                prefix.add(arr[i]);
            }
            Collections.sort(prefix);
            long prefixSum = 0;
            // Sum the smallest `r - l + 1` elements from the sorted prefix
            for (int i = 0; i < r - l + 1; i++) {
                prefixSum += prefix.get(i);
            }
            min = Math.min(min, prefixSum);  // Update the minimum sum

            // Step 3: Find the smallest `r - l + 1` elements from [l, n]
            List<Long> suffix = new ArrayList<>();
            for (int i = l; i <= n; i++) {
                suffix.add(arr[i]);
            }
            Collections.sort(suffix);
            long suffixSum = 0;
            // Sum the smallest `r - l + 1` elements from the sorted suffix
            for (int i = 0; i < r - l + 1; i++) {
                suffixSum += suffix.get(i);
            }
            min = Math.min(min, suffixSum);  // Update the minimum sum

            // Output the result for the current test case
            System.out.println(min);
        }
    }
}


Solution 2 (runtime: 499 ms):
import java.util.*;

public class Main
{
	public static void main(String[] args) {
		int t;
		Scanner sc = new Scanner(System.in);
		t = sc.nextInt();
		while(t > 0){
		    int n = sc.nextInt();
		    int l = sc.nextInt();
		    int r = sc.nextInt();
		    l--;
		    r--;
		    List<Integer> arr1 = new ArrayList<>();
		    List<Integer> arr2 = new ArrayList<>();
		    List<Integer> arr3 = new ArrayList<>();
		    for (int i = 0; i < l; i++){
		        arr1.add(sc.nextInt());
		    }
		    for (int i = l; i <= r; i++){
		        arr2.add(sc.nextInt());
		    }
		    for (int i = r + 1; i < n; i++){
		        arr3.add(sc.nextInt());
		    }
		    Collections.sort(arr1);
		    Collections.sort(arr2);
		    Collections.sort(arr3);
		  //  System.out.println(arr1);
		  //  System.out.println(arr2);
		  //  System.out.println(arr3);
		    long sum1 = 0, sum2 = 0;
		    int j = 0;
		    for (int i = arr2.size() - 1; i >= 0; i--){
		        int num1 = arr2.get(i);
		        if (j < arr1.size()){
		            num1 = Math.min(num1, arr1.get(j));
		            j++;
		        }
		        sum1 += num1;
		    }
		    j = 0;
		    for (int i = arr2.size() - 1; i >= 0; i--){
		        int num1 = arr2.get(i);
		        if (j < arr3.size()){
		            num1 = Math.min(num1, arr3.get(j));
		            j++;
		        }
		        sum2 += num1;
		    }
		    long ans = Math.min(sum1, sum2);
		    System.out.println(ans);
		    t--;
		}
	}
}