제출 #1325127

#제출 시각아이디문제언어결과실행 시간메모리
1325127reginoxHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
100 / 100
1112 ms117168 KiB
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define all(v) begin(v), end(v)
#define pi pair<int, int>
#define vi vector<int>
using namespace std;
const int N = 1e6+3;
int n, q, a[N], l[N];
int t[N*4];
int ql[N], qr[N], qk[N], qa[N];

void up(int u, int v, int id=1, int l=1, int r=n){
  if(u < l || r < u) return ;
  if(l == r){
    t[id] = v;
    return ;
  }
  int mid = (l+r)/2;
  up(u, v, id*2, l, mid);
  up(u, v, id*2+1, mid+1, r);
  t[id] = max(t[id*2], t[id*2+1]);
  return;
}

int get(int u, int v, int id=1, int l=1, int r=n){
  if(v < l || r < u) return 0;
  if(u <= l && r <= v) return t[id];
  int mid = (l+r)/2;
  return max(get(u, v, id*2, l, mid), get(u, v, id*2+1, mid+1, r));
}

vector<int> o[N], qo[N];

int main(){
  ios_base::sync_with_stdio(0); cin.tie(0);
  cin >> n >> q;
  stack<int> s;
  for(int i = 1; i <= n; i++){
    cin >> a[i];
    while(!s.empty() && a[s.top()] <= a[i]) s.pop();
    if(!s.empty()) l[i] = s.top();
    s.push(i);
    o[l[i]].push_back(i);
  }
  for(int i = 1; i <= q; i++){
    cin >> ql[i] >> qr[i] >> qk[i];
    qo[ql[i]].push_back(i);
  }
  for(int i = n; i >= 1; i--){
    for(auto x:o[i]){
      up(x, a[i]+a[x]);
    }
    for(auto x:qo[i]){
      if(get(i, qr[x]) <= qk[x]) qa[x] = 1;
    }
  }
  for(int i = 1; i <= q; i++) cout << qa[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...