Submission #1336528

#TimeUsernameProblemLanguageResultExecution timeMemory
1336528zhehanHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
100 / 100
1737 ms41548 KiB
#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> ii;

vector<int> segtree;

void upd(int node, int tl, int tr, int p, int val) {
  if (tl == tr) {
    segtree[node] = max(segtree[node], val);
    return;
  }
  int tm = (tl + tr) / 2;
  if (p <= tm) {
    upd(node * 2, tl, tm, p, val);
  } else {
    upd(node * 2 + 1, tm + 1, tr, p, val);
  }
  segtree[node] = max(segtree[node * 2], segtree[node * 2 + 1]);
}

int query(int node, int tl, int tr, int l, int r) {
  if (l > tr || r < tl)
    return 0;
  if (l <= tl && r >= tr) {
    return segtree[node];
  }
  int tm = (tl + tr) / 2;
  return max(query(node * 2, tl, tm, l, r),
             query(node * 2 + 1, tm + 1, tr, l, r));
}

int main() {
  int n, m;
  cin >> n >> m;
  vector<int> books(n, 0);
  for (int i = 0; i < n; ++i) {
    cin >> books[i];
  }
  segtree = vector<int>(4 * n + 10, 0);
  stack<int> inversions;
  int l, r, mood;
  priority_queue<pair<ii, ii>, vector<pair<ii, ii>>, greater<pair<ii, ii>>>
      queries;
  for (int i = 0; i < m; ++i) {
    cin >> l >> r >> mood;
    --l, --r;
    queries.emplace(ii(r, l), ii(mood, i));
  }
  vector<int> ans(m, 0);
  for (int i = 0; i < n; ++i) {
    while (!inversions.empty() && books[inversions.top()] <= books[i]) {
      inversions.pop();
    }
    if (!inversions.empty()) {
      upd(1, 0, n, inversions.top(), books[inversions.top()] + books[i]);
    }
    inversions.push(i);
    while (!queries.empty() && queries.top().first.first == i) {
      ans[queries.top().second.second] =
          (query(1, 0, n, queries.top().first.second,
                 queries.top().first.first) <= queries.top().second.first);
      queries.pop();
    }
  }
  for (auto e : ans) {
    cout << e << '\n';
  }
  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...