Problem: 2063B - Subsequence Update
Language: C++17 (GCC 7-32)

Previous submission (verdict: Wrong answer on test 8):
#include <bits/stdc++.h>

using namespace std;



#define ll long long int

#define ull unsigned long long int

#define ld long double

#define vi vector<int>

#define vll vector<ll>

#define pii pair<int, int>

#define pll pair<ll, ll>

#define mp make_pair

#define pb push_back

#define F first

#define S second

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

#define SORT(v) sort(ALL(v))

#define REVERSE(v) reverse(ALL(v))

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

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

#define FAST_IO ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)



const ll MOD = 1e9 + 7;

const ll INF = 1e18;

const ld EPS = 1e-9;



ll gcd(ll a, ll b) {

    while (b != 0) {

        ll temp = b;

        b = a % b;

        a = temp;

    }

    return a;

}



ll lcm(ll a, ll b) {

    return (a / gcd(a, b)) * b;

}



ll mod_exp(ll base, ll exp, ll mod) {

    ll result = 1;

    while (exp > 0) {

        if (exp % 2 == 1) {

            result = (result * base) % mod;

        }

        base = (base * base) % mod;

        exp /= 2;

    }

    return result;

}



bool is_prime(ll n) {

    if (n <= 1) return false;

    if (n <= 3) return true;

    if (n % 2 == 0 || n % 3 == 0) return false;

    for (ll i = 5; i * i <= n; i += 6) {

        if (n % i == 0 || n % (i + 2) == 0) return false;

    }

    return true;

}



void solve() {

    // Your solution code here

    ll n,l,r;

    cin>>n>>l>>r;

    vll pre,seg,next;

    ll a;

    FOR(i,0,n){

        cin>>a;

        if(i<l-1){

          pre.push_back(a);

        }else if(i>=l-1 && i<r){

          seg.push_back(a);

        }else{

            next.push_back(a);

        }

    }



    SORT(pre);

    SORT(seg);

    REVERSE(seg);

    SORT(next);



    ll i = 0;

    ll j = 0;

   

    

    ll sum = accumulate(ALL(seg),0);

    ll sum1 = sum;

    ll sum2 = sum;

    while(i<pre.size() && j<seg.size()){

        if(seg[j]<=pre[i]) break;

        sum1+=pre[i];

        sum1-=seg[j];

        i++;

        j++;

    }

    i = 0;

    j = 0;



    while(i<next.size() && j<seg.size()){

        if(seg[i]<=next[j]) break;

       sum2+=next[i];

       sum2-=seg[j];

       i++;

       j++;

    }



   

    cout<<min(sum1,sum2)<<endl;

}



int main() {

    FAST_IO;



    int t;

    cin >> t;

    while (t--) {

        solve();

    }



    return 0;

}

Submission (verdict: Accepted):
#include <bits/stdc++.h>

using namespace std;



#define ll long long int

#define ull unsigned long long int

#define ld long double

#define vi vector<int>

#define vll vector<ll>

#define pii pair<int, int>

#define pll pair<ll, ll>

#define mp make_pair

#define pb push_back

#define F first

#define S second

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

#define SORT(v) sort(ALL(v))

#define REVERSE(v) reverse(ALL(v))

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

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

#define FAST_IO ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)



const ll MOD = 1e9 + 7;

const ll INF = 1e18;

const ld EPS = 1e-9;



ll gcd(ll a, ll b) {

    while (b != 0) {

        ll temp = b;

        b = a % b;

        a = temp;

    }

    return a;

}



ll lcm(ll a, ll b) {

    return (a / gcd(a, b)) * b;

}



ll mod_exp(ll base, ll exp, ll mod) {

    ll result = 1;

    while (exp > 0) {

        if (exp % 2 == 1) {

            result = (result * base) % mod;

        }

        base = (base * base) % mod;

        exp /= 2;

    }

    return result;

}



bool is_prime(ll n) {

    if (n <= 1) return false;

    if (n <= 3) return true;

    if (n % 2 == 0 || n % 3 == 0) return false;

    for (ll i = 5; i * i <= n; i += 6) {

        if (n % i == 0 || n % (i + 2) == 0) return false;

    }

    return true;

}



void solve() {

    // Your solution code here

    ll n,l,r;

    cin>>n>>l>>r;

    vll pre,seg,next;

    ll a;

    FOR(i,0,n){

        cin>>a;

        if(i<l-1){

          pre.push_back(a);

        }else if(i>=l-1 && i<r){

          seg.push_back(a);

        }else{

            next.push_back(a);

        }

    }



    SORT(pre);

    SORT(seg);

    REVERSE(seg);

    SORT(next);



    ll i = 0;

    ll j = 0;

   

    

    ll sum = 0;

    FOR(i,0,seg.size()) sum+=seg[i];

    ll sum1 = sum;

    ll sum2 = sum;

    while(i<pre.size() && j<seg.size()){

        if(seg[j]<=pre[i]) break;

        sum1+=pre[i];

        sum1-=seg[j];

        i++;

        j++;

    }

    i = 0;

    j = 0;



    while(i<next.size() && j<seg.size()){

        if(seg[i]<=next[j]) break;

       sum2+=next[i];

       sum2-=seg[j];

       i++;

       j++;

    }



   

    cout<<min(sum1,sum2)<<endl;

}



int main() {

    FAST_IO;



    int t;

    cin >> t;

    while (t--) {

        solve();

    }



    return 0;

}