Submission #1288177

#TimeUsernameProblemLanguageResultExecution timeMemory
1288177LIATricks of the Trade (CEOI23_trade)C++17
20 / 100
8087 ms275960 KiB
#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define vll vector<ll>
#define pll pair<ll, ll>
#define tp tuple<ll, ll, ll>
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  ll n, k, ans = -1e18;
  cin >> n >> k;
  vll b(n), s(n);
  for (ll i = 0; i < n; ++i)
    cin >> b[i];
  for (ll i = 0; i < n; ++i)
    cin >> s[i];
  vector<tp> vec;
  for (ll st = 0; st < n; ++st) {
    ll sum_buy = 0;
    priority_queue<pll, vector<pll>, greater<pll>> pq;
    ll sum_pq = 0;
    for (ll ed = st; ed < n; ++ed) {
      sum_buy += b[ed];
      pq.push({s[ed], ed});
      sum_pq += s[ed];
      while (pq.size() > k) {
        auto [node, idx] = pq.top();
        pq.pop();
        sum_pq -= node;
      }
      if (pq.size() == k) {
        ll ans_ed = sum_pq - sum_buy;
        if (ans < ans_ed) {
          vec.clear();
          ll t = pq.top().first;
          ans = ans_ed;
          vec.push_back({st, ed, t});
        } else if (ans == ans_ed) {
          ans = ans_ed;
          ll t = pq.top().first;
          vec.push_back({st, ed, t});
        }
      }
    }
  }

  multiset<ll> k_in;
  string ansi(n, '0');

  vector<vector<pll>> updates(n + 1);

  for (auto [l, r, c] : vec) {
    updates[l].push_back({c, 1});
    updates[r + 1].push_back({c, -1});
  }

  for (ll i = 0; i < n; ++i) {
    for (auto [c, t] : updates[i]) {
      if (t == 1) {
        k_in.insert(c);
      } else {
        auto it = k_in.find(c);
        if (it != k_in.end())
          k_in.erase(it);
      }
    }

    if (!k_in.empty()) {     
      ll mn = *k_in.begin(); 
      if (s[i] >= mn)
        ansi[i] = '1';
    }
  }

  cout << ans << endl
       << ansi;
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...