Submission #346606

#TimeUsernameProblemLanguageResultExecution timeMemory
346606milleniumEeeeHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
1792 ms63960 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAXN = (int)1e6 + 6;

struct Query {
  int l, k, id;
  Query (int l_, int k_, int id_) {
    l = l_, k = k_, id = id_;
  }
  Query () {
    
  }
};

vector <Query> query[MAXN];
int a[MAXN];
int ans[MAXN];
int tree[MAXN * 4];

void upd(int pos, int val, int v = 1, int tl = 1, int tr = MAXN) {
  if (tl == tr) {
    tree[v] = max(tree[v], val);
    return;
  }
  int mid = (tl + tr) >> 1;
  if (pos <= mid) {
    upd(pos, val, v + v, tl, mid);
  } else {
    upd(pos, val, v + v + 1, mid + 1, tr);
  }
  tree[v] = max(tree[v + v], tree[v + v + 1]);
}

int get(int l, int r, int v = 1, int tl = 1, int tr = MAXN) {
  if (l <= tl && tr <= r) {
    return tree[v];
  }
  if (l > tr || tl > r) {
    return 0;
  }
  int mid = (tl + tr) >> 1;
  return max(get(l, r, v + v, tl, mid), get(l, r, v + v + 1, mid + 1, tr));
}

signed main() {
  ios_base::sync_with_stdio(0); cin.tie(0);
  int n, q;
  cin >> n >> q;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  vector <Query> vec;
  for (int i = 1; i <= q; i++) {
    int l, r, k;
    cin >> l >> r >> k;
    query[r].push_back(Query(l, k, i));
  }
  vector <pair<int, int>> st;
  for (int r = 1; r <= n; r++) {
    while (!st.empty() && st.back().first < a[r]) {
      st.pop_back();
    }
    if (!st.empty() && st.back().first > a[r]) {
      upd(st.back().second, st.back().first + a[r]);
    }
    st.push_back({a[r], r});
    while (!query[r].empty()) {
      int l = query[r].back().l;
      int k = query[r].back().k;
      int id = query[r].back().id;
      query[r].pop_back();
      ans[id] = (get(l, r) <= k);
    }
  }
  for (int i = 1; i <= q; i++) {
    cout << ans[i] << "\n";
  }
}
#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...