Submission #599526

#TimeUsernameProblemLanguageResultExecution timeMemory
599526PetyAutobahn (COI21_autobahn)C++14
50 / 100
270 ms24976 KiB
#include <bits/stdc++.h>
#define ll long long

using namespace std;

const int INF = 1e9;
const int MOD = 1e9 + 7;

int n, k, x;

map<int, pair<int, int>>mp;
struct intervals {
  int l, r, cost;
  bool operator < (const intervals other) {
    return l < other.l;
  }
} v[300002];
long long s[300002];

int main () 
{
  ios_base::sync_with_stdio(false);
  cin.tie(0); cout.tie(0);
  cin >> n >> k >> x;
  for (int i = 1; i <= n; i++) {
    int a, b,c;
    cin >> a >> b >> c;
    if (a + b - 1 < c) {
      mp[a + b].second++;
      mp[c + 1].second--;
    }
    mp[a].first++;
    mp[c + 1].first--;
  }
  pair<int, int>sum;
  int last = 0;
  int nr = 0;
  for (auto it2 : mp) {
    if (sum.first >= k && sum.second) {
      v[++nr] = {last, it2.first-1, sum.second};
    }
    auto it = it2.second;
    sum.first += it.first;
    sum.second += it.second;
    last = it2.first;
  }
  sort(v + 1,v + nr + 1);
  ll ans = 0;
  for (int i = 1; i <= nr; i++) {
    s[i] = s[i - 1] + 1ll * (v[i].r - v[i].l + 1) * v[i].cost;
  }
  for (int i = 1; i <= nr; i++) {
    int idk = i, st = i, dr = nr;
    while (st <= dr) {
      int mij = (st + dr) / 2;
      if (v[mij].l <= v[i].l + x - 1) {
        idk = mij;
        st = mij + 1;
      }
      else
        dr = mij - 1;
    }
    ll val = s[idk] - s[i - 1];
    if (v[i].l + x - 1 <= v[idk].r)
      val -= (v[idk].r - v[i].l - x + 1) * v[idk].cost;
    ans = max(ans, val);
  }
  for (int i = 1; i <= nr; i++) {
    int idk = 1, st = 1, dr = i;
    while (st <= dr) {
      int mij = (st + dr) / 2;
      if (v[mij].r >= v[i].l - x + 1) {
        idk = mij;
        dr = mij - 1;
      }
      else
        st = mij + 1;
    }
    ll val = s[i] - s[idk - 1];
    if (v[i].r - x + 1 >= v[idk].l)
      val -= (v[i].r - x + 1 - v[idk].l) * v[idk].cost;
    ans = max(ans, val);
  }
  cout << ans;
  return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...