Problem p02610 (C++) — buggy submission, verdict: Runtime Error

#include <bits/stdc++.h>
using namespace std;

int main() {
  int T;
  cin >> T;

  for (int i = 0; i < T; i++) {
    int N;
    cin >> N;

    vector<long long> K(N), L(N), R(N);
    for (int j = 0; j < N; j++)
      cin >> K[j] >> L[j] >> R[j];

    vector<pair<long long, long long>> l, r;
    long long ans = 0LL;
    for (int j = 0; j < N; j++) {
      if (L[j] > R[j]) {
        ans += R[j]; // 最低限R[j]はもらえる
        l.emplace_back(K[j] - 1, L[j] - R[j]);
      } else {
        ans += L[j]; // 最低限L[j]はもらえる
        r.emplace_back(N - K[j] - 1, R[j] - L[j]);
      }
    }
    sort(l.begin(), l.end());
    sort(r.begin(), r.end());
    priority_queue<long long, vector<long long>, greater<long long>> que;
    for (int j = 0; j < l.size(); j++) {
      if ((int)que.size() <= l[j].first) {
        ans += l[j].second;
        que.push(l[j].second);
      } else {
        if (que.size() == 0)
          continue;
        if (que.top() < l[j].second) {
          ans -= que.top();
          que.pop();
          ans += l[j].second;
          que.push(l[j].second);
        }
      }
    }

    while (que.size() != 0)
      que.pop();

    for (int j = 0; j < r.size(); j++) {
      if ((int)que.size() <= r[j].first) {
        ans += r[j].second;
        que.push(r[j].second);
      } else {
        if (que.size() == 0)
          continue;
        else {
          if (que.top() < r[j].second) {
            ans -= que.top();
            que.pop();
            ans += r[j].second;
            que.push(r[j].second);
          }
        }
      }
    }

    cout << ans << endl;
  }
}

Error: WA

Fixed submission:

#include <bits/stdc++.h>
using namespace std;

int main() {
  int T;
  cin >> T;

  for (int i = 0; i < T; i++) {
    int N;
    cin >> N;

    vector<long long> K(N), L(N), R(N);
    for (int j = 0; j < N; j++)
      cin >> K[j] >> L[j] >> R[j];

    vector<pair<long long, long long>> l, r;
    long long ans = 0LL;
    for (int j = 0; j < N; j++) {
      if (L[i] > R[i]) {
        ans += R[i]; // 最低限R[i]はもらえる
        l.emplace_back(K[i] - 1, L[i] - R[i]);
      } else {
        ans += L[i]; // 最低限L[i]はもらえる
        r.emplace_back(N - K[i] - 1, R[i] - L[i]);
      }
    }
    sort(l.begin(), l.end());
    sort(r.begin(), r.end());
    priority_queue<long long, vector<long long>, greater<long long>> que;
    for (int j = 0; j < l.size(); j++) {
      if (que.size() <= l[j].first) {
        ans += l[j].second;
        que.push(l[j].second);
      } else {
        if (que.size() == 0)
          continue;
        if (que.top() < l[j].second) {
          ans -= que.top();
          que.pop();
          ans += l[j].second;
          que.push(l[j].second);
        }
      }
    }

    while (!que.empty())
      que.pop();

    for (int j = 0; j < r.size(); j++) {
      if (que.size() <= r[j].first) {
        ans += r[j].second;
        que.push(r[j].second);
      } else {
        if (que.size() == 0)
          continue;
        else {
          if (que.top() < r[j].second) {
            ans -= que.top();
            que.pop();
            ans += r[j].second;
            que.push(r[j].second);
          }
        }
      }
    }

    cout << ans << endl;
  }
}