Submission #676305

#TimeUsernameProblemLanguageResultExecution timeMemory
676305vjudge1Schools (IZhO13_school)C++17
5 / 100
229 ms13868 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 3e5 + 5;

/*
    i < j
    a[i] + b[j] > a[j] + b[i]
<=> a[i] - a[j] > b[i] - b[j]
--> just choose prefix
*/

int id[N];
int a[N], b[N];
int n, m, s;
int64_t pre[N], suf[N];

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0); cout.tie(0);

  cin >> n >> m >> s;

  for (int i = 1; i <= n; i++) {
    cin >> a[i] >> b[i];
  }

  iota(id + 1, id + n + 1, 1);
  sort(id + 1, id + n + 1, [&](int i, int j) {
    return a[i] - a[j] > b[i] - b[j];
  });

  {
    multiset<int> ss;
    int64_t cur = 0;
    for (int i = 1; i <= n; i++) {
      cur += a[i];
      ss.insert(a[i]);
      if (ss.size() > m) {
        cur -= *ss.begin();
        ss.erase(*ss.begin());
      }
      pre[i] = cur;
    }
  }

  {
    multiset<int> ss;
    int64_t cur = 0;
    for (int i = n; i >= 1; i--) {
      cur += b[i];
      ss.insert(b[i]);
      if (ss.size() > s) {
        cur -= *ss.begin();
        ss.erase(*ss.begin());
      }
      suf[i] = cur;
    }
  }

  int64_t best = 0;
  for (int i = m; i <= n - s; i++) {
    best = max(best, pre[i] + suf[i + 1]);
  }

  cout << best;

  return 0;
}

Compilation message (stderr)

school.cpp: In function 'int main()':
school.cpp:39:21: warning: comparison of integer expressions of different signedness: 'std::multiset<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   39 |       if (ss.size() > m) {
      |           ~~~~~~~~~~^~~
school.cpp:53:21: warning: comparison of integer expressions of different signedness: 'std::multiset<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   53 |       if (ss.size() > s) {
      |           ~~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...