제출 #213772

#제출 시각아이디문제언어결과실행 시간메모리
213772quocnguyen1012Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
100 / 100
2258 ms154232 KiB
#include <bits/stdc++.h>

#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define eb emplace_back

using namespace std;
typedef long long ll;
typedef pair<int, int> ii;

class segment_tree
{
#define lc id << 1
#define rc id << 1 | 1
private:
  vector<int> ST; int n;
  void update(int id, int l, int r, int pos, int val)
  {
    if(l > pos || r < pos) return;
    if(l == r){
      ST[id] = max(ST[id], val);
      return;
    }
    int mid = (l + r) / 2;
    update(lc, l, mid, pos, val); update(rc, mid + 1, r, pos, val);
    ST[id] = max(ST[lc], ST[rc]);
  }
  int get(int id, int l, int r, int L, int R)
  {
    if(R < l || r < L) return -2e9;
    if(L <= l && r <= R) return ST[id];
    int mid = (l + r) / 2;
    return max(get(lc, l, mid, L, R), get(rc, mid + 1, r, L, R));
  }
public:
  void init(int _n)
  {
    n = _n;
    ST.assign(4 * n + 5, 0);
  }
  void update(int p, int v)
  {
    update(1, 1, n, p, v);
  }
  int get(int l, int r)
  {
    return get(1, 1, n, l, r);
  }
#undef lc
#undef rc
}tr;

const int maxn = 1e6 + 5;

int N, Q, a[maxn], l[maxn], r[maxn], k[maxn], res[maxn];
vector<int> query[maxn], add[maxn];
vector<int> st;

signed main(void)
{
  ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  #ifdef LOCAL
    freopen("A.INP", "r", stdin);
    freopen("A.OUT", "w", stdout);
  #endif // LOCAL
  cin >> N >> Q;
  for(int i = 1; i <= N; ++i){
    cin >> a[i];
    while(st.size() && a[st.back()] <= a[i]) st.pop_back();
    if(st.size()) add[st.back()].pb(i);
    st.pb(i);
  }
  for(int i = 1; i <= Q; ++i){
    cin >> l[i] >> r[i] >> k[i];
    query[l[i]].eb(i);
  }
  tr.init(N);
  for(int i = N; i >= 1; --i){
    for(int j : add[i]) tr.update(j, a[i] + a[j]);
    for(int id : query[i]){
      res[id] = (tr.get(l[id], r[id]) <= k[id]);
    }
  }
  for(int i = 1; i <= Q; ++i)
    cout << res[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...