Submission #1174992

#TimeUsernameProblemLanguageResultExecution timeMemory
1174992julia_08Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
100 / 100
1090 ms115160 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1e6 + 10;

struct event{
  int x, t, i;

  bool operator < (event other){
    if(x != other.x) return x > other.x;
    if(t != other.t) return t < other.t;
    return i < other.i;
  }

};

int w[MAXN], l[MAXN], r[MAXN], k[MAXN];

int ans[MAXN];

int seg[4 * MAXN];

vector<event> all_events;
vector<vector<event>> sorted_events;

void update(int x, int lx, int rx, int i, int val){

  if(rx < i || lx > i) return;

  if(lx == rx){
    seg[x] = val;
    return;
  }

  int m = (lx + rx) / 2, lc = 2 * x, rc = 2 * x + 1;

  update(lc, lx, m, i, val);
  update(rc, m + 1, rx, i, val);

  seg[x] = max(seg[lc], seg[rc]);
}

int query(int x, int lx, int rx, int l, int r){

  if(rx < l || lx > r) return 0;

  if(l <= lx && rx <= r) return seg[x];

  int m = (lx + rx) / 2, lc = 2 * x, rc = 2 * x + 1;

  return max(query(lc, lx, m, l, r), query(rc, m + 1, rx, l, r));
}

int main(){
  cin.tie(0)->sync_with_stdio(0);

  int n, m; cin >> n >> m;

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

  stack<int> q;

  for(int i=1; i<=n; i++){

    while(!q.empty() && w[q.top()] <= w[i]) q.pop();

    if(!q.empty()) all_events.push_back({q.top(), 0, i});

    q.push(i);

  }

  for(int i=1; i<=m; i++){
    cin >> l[i] >> r[i] >> k[i];
    all_events.push_back({l[i], 1, i});
  }

  sort(all_events.begin(), all_events.end());

  int last_x = -1e9;

  for(auto &ev : all_events){

    if(ev.x != last_x){
      last_x = ev.x;
      sorted_events.push_back({});
    }

    sorted_events.back().push_back(ev);
    
  }

  for(auto &evs : sorted_events){
    for(auto &ev : evs){

      if(ev.t == 0){
        update(1, 1, n, ev.i, w[ev.x] + w[ev.i]);

      } else{
        ans[ev.i] = query(1, 1, n, l[ev.i], r[ev.i]);
      }

    }
  }

  for(int i=1; i<=m; i++) cout << (ans[i] <= k[i]) << "\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...