Problem: 2063B - Subsequence Update
Language: c++17 

Solution 1 (runtime: 187 ms):
#include<bits/stdc++.h>
#define ll long long 
using namespace std;
//int main()
//{
//	int t;
//	cin>>t;
//	while(t--)
//	{
//		int n,l,r,x;
//		ll y=0;
//		int a[100000];
//		cin>>n>>l>>r;
//		x=r-l+1;
//		for(int i=1;i<=n;i++)
//		{
//			cin>>a[i];
//		}
//		sort(a+1,a+n+1);
//		for(int i=1;i<=x;i++)
//		{
//			y+=a[i];
//		}
//		cout<<y<<endl;
//	}
//	return 0;
//}
//只能一次反转
void solve()
{
	int n,l,r;
	cin>>n>>l>>r;
	ll res=0;
	vector<int>a(n+1);
	for(int i=1;i<=n;i++)
		cin>>a[i];
	priority_queue<int> tmpl_ans,tmpr_ans;
	//tmpl_ans 和 tmpr_ans 是最大堆，用于存储区间 [l, r] 内的元素。
    priority_queue<int,vector<int>,greater<int>> lans,rans;
	//lans 和 rans 是最小堆，分别用于存储区间 [1, l-1] 和 [r+1, n] 的元素。
	for(int i=l;i<=r;i++)
	{
		res+=a[i];
		tmpl_ans.push(a[i]);
		tmpr_ans.push(a[i]);
	}
	for(int i=1;i<l;i++)
		lans.push(a[i]);
	for(int i=r+1;i<=n;i++)
		rans.push(a[i]);
	
	ll res1=res;
	
  while (!lans.empty()){
    int now1 = tmpl_ans.top(),now2 = lans.top();
    if (now1>now2){
      res -= now1-now2;
      tmpl_ans.pop();
      tmpl_ans.push(now2);
      lans.pop();
    }else{
      break;
    }
  }
  while (!rans.empty()){
    int now1 = tmpr_ans.top(),now2 = rans.top();//最大元素
    if (now1>now2){
      res1 -= now1-now2;
      tmpr_ans.pop();//移除堆顶的最大元素
      tmpr_ans.push(now2);//将新的较小元素 now2 插入堆中
      rans.pop();
    }else{
      break;
    }
  }
  cout<<min(res1,res)<<endl;
}
 
int main()
{
	int t;
	cin>>t;
    while (t--) 
	{
		solve();
	}
	return 0;
}


Solution 2 (runtime: 187 ms):
#include <bits/stdc++.h>

using namespace std;

#define ll             long long int 

#define ff(i,a,b)      for(int i=a;i<b;i++)

#define l(s)           s.length()

#define sa(a,n)        sort(a,a+n)

#define sv(v)          sort(v.begin(),v.end())

#define vi             vector<ll>

#define input(a,n)     for(int i=0;i<n;i++) cin>>a[i];

#define rv(v)          reverse(v.begin(),v.end())

#define pb             push_back

#define mp             make_pair

#define all(v)         v.begin(),v.end()

#define ff(i,a,b)      for(int i=a;i<b;i++)

#define fr(i,a,b)      for(int i=a;i>=b;i--)

const int mod=1e9+7;

vector<bool> isprime(1000001,true);

int binexp(int a,int b,int m){

 int res=1;

while(b>0){

if(b&1){

res=(res*1LL*a)%mod;

}

a=(a*1LL*a)%mod;

b>>=1;

}

return res;

}

void peak_pd(){

  int t;

  cin>>t;

  while(t--){

    ll n, l, r;

        cin >> n >> l >> r;

        l--;

        

        vi arr(n);

        for (int i = 0; i < n; i++) {

            cin >> arr[i];

        }

        

        vi brr(arr.begin(), arr.begin() + l);

        vi crr(arr.begin(), arr.begin() + r);

        

        vi sorted_part(arr.begin() + l, arr.end());

        sort(sorted_part.begin(), sorted_part.end());

        brr.insert(brr.end(), sorted_part.begin(), sorted_part.end());

        

        sort(crr.begin(), crr.end(), greater<int>());

        crr.insert(crr.end(), arr.begin() + r, arr.end());

        

        ll sumb = 0, sumc = 0;

        for (int i = l; i < r; i++) {

            sumb += brr[i];

            sumc += crr[i];

        }

        

        cout << min(sumb, sumc) << '\n';

  }

  



}

int main(){

isprime[0]=isprime[1]=1;

for(int i=2;i<=1000000;i++)

{

if(isprime[i]==true)

{

for(int j=2*i;j<=1000000;j+=i)

{

isprime[j]=false;

}

}

}

peak_pd();

return 0;

}