Submission #879598

#TimeUsernameProblemLanguageResultExecution timeMemory
879598Elvin_FritlHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
2920 ms125684 KiB
#include <bits/stdc++.h>
using namespace std;
 
#define io                      \
    ios_base::sync_with_stdio(0); \
    cin.tie(0);                   \
    cout.tie(0);
 
 
typedef long long ll;
 
ll bp(ll n,ll m){
    if(m == 0){
        return 1;
    }
    if(m == 1){
        return n;
    }
    if(m%2==0){
        return bp(n*n,m/2);
    }
    return n*bp(n,m-1);
}
 
 
const int N =  1e6 + 545, M = 33, inf = 1e9 + 99;
const ll inff = 1e12;
 
struct segtree {
 
	ll tree[N*3];
	
	void update(int v,int l,int r,int pos ,ll val) {
		if(l == r) {
			tree[v] = val;
			///cerr << v << "         " << tree[v] << endl;
			return;
		}
		int mid = (l + r)/2;
		if(pos <= mid) {
			update(v*2 , l , mid , pos , val);
		}
		else {
			update(v*2 + 1, mid + 1 , r , pos , val);
		}
		///cerr << v << "          " << tree[v] << endl;
		tree[v] = max(tree[v*2], tree[v*2 + 1]);
	}
	
	ll get(int v,int l, int r, int ml , int mr) {
		if(l > mr || r < ml) {
			return 0LL;
		}
		if(ml <= l && r <= mr) {
			return tree[v];
		}
		int mid = (l + r)/2;
		return max(get(v*2 , l, mid , ml, mr), get(v*2 + 1 , mid + 1, r , ml, mr));
	}
};
 
vector<pair<pair<ll , ll > , ll>> qu[N]; 
ll a[N];
vector<ll> ans(N , -1);
 
segtree S;
 
int main() {
	int n, q;
    cin >> n >> q;
    for(int i=1;i<=n;i++) {
        cin >> a[i];
    }
    for(int i=1;i<=q;i++) {
        ll l, r, k; 
        cin >> l >> r >> k;
        qu[r].push_back({{l, k}, i});
    }
    stack <ll> s;
	for(ll r=1;r<=n;r++) {
		while( (int)s.size() > 0 && a[s.top()] <= a[r])  {
			s.pop();
		}
		if( (int)s.size() > 0 ) {
			S.update(1 ,1 , n , s.top(), (ll)  a[r] + a[s.top()]);
			///cerr << s.top() << "     " << a[r] + a[s.top()] << endl;
			///cout << "get    ::    "  << S.get(1,1,n,1,n) << endl;
		}
		for(pair<pair<ll , ll>, ll> i : qu[r]) {
			ll l = i.first.first, k = i.first.second, ind = i.second;
			ll tmp = S.get(1 , 1 , n  , l, r);
			///cerr << tmp << endl;
			if(tmp <= k){ 
				ans[ind] = 1;
			}
          	else{
              ans[ind] = 0;
            }
		}
		s.push(r);
	}
	for(int i=1;i<=q;i++) {
      if(ans[i] == -1) {
        while(true);
      }
		cout << ans[i] << endl;
	}
    
}
#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...