Submission #1188059

#TimeUsernameProblemLanguageResultExecution timeMemory
1188059akamizaneHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
100 / 100
624 ms92924 KiB
#include<bits/stdc++.h>
using namespace std;

#define debug(...) 42

#define int long long
using ll = long long;

struct BIT{
   vector<int> bit;
   BIT(int n){bit = vector<int>(n + 1);}
   void up(int k, int x){
      k++;
      for(; k; k -= k & -k){
         bit[k] = max(bit[k], x);
      }
   }
   int get(int k){
      k++;
      int ans = 0;
      for (;k < bit.size(); k += k & -k){
         ans = max(ans, bit[k]);
      }
      return ans;
   }
};

void solve(){
   int n, q;
   cin >> n >> q;
   vector<int> a(n + 1);
   a[0] = 1e9 + 5;
   for (int i = 1; i <= n; i++) cin >> a[i];
   vector<int> to[n + 1];
   vector<array<int, 3>> que;
   for (int i = 0; i < q; i++){
      int l, r, k;
      cin >> l >> r >> k;
      que.push_back({l, r, k});
      to[r].push_back(i);
   }
   BIT bit(1e6);
   vector<int> ans(q);
   vector<int> st = {0};
   for (int i = 1; i <= n; i++){
      while(a[st.back()] <= a[i]) st.pop_back();
      bit.up(st.back(), a[i] + a[st.back()]);
      st.push_back(i);
      for (auto idx : to[i]){
         auto [l, r, k] = que[idx];
         ans[idx] = bit.get(l) <= k;
      }
   }
   for (auto x : ans) cout << x << "\n";
}

int32_t main() {
   ios_base::sync_with_stdio(false);
   cin.tie(0);
   int tt = 1;
   // cin >> tt;
   while(tt--) {
      solve();
   }
   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...