Submission #1156388

#TimeUsernameProblemLanguageResultExecution timeMemory
1156388AbdullahIshfaqHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
100 / 100
626 ms71136 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MOD 1000000007
const int N = 1000005;
ll fen[N], n;
void update(ll i , ll x){
    for( ; i >= 1 ; i -= i & -i){
        fen[i] = max(fen[i] , x);
    }
}
ll query(ll i){
    ll mx = 0;
    for( ; i <= n ;i += i & -i){
        mx = max(mx , fen[i]);
    }
    return mx;
}
void solve(){
	ll m, l , r, c;
	cin >> n >> m;
	ll a[n + 1];
	vector<tuple<int, int, int>> q[n + 1];
	ll ans[m + 1];
	stack<int> s;
	s.push(0);
	a[0] = 2e9 + 5;
	for(int i = 1; i <= n; i ++){
		cin >> a[i];
	}
	for(int i = 1; i <= m; i ++){
		cin >> l >> r >> c;
		q[r].push_back({l, c, i});
	}
	for(int i = 1; i <= n; i ++){
		while(a[s.top()] <= a[i]){
			s.pop();
		}
		if(s.top()){
			update(s.top(), a[s.top()] + a[i]);
		}
		s.push(i);
		for(auto [l, r, c] : q[i]){	
			ans[c] = query(l) <= r;
		}
	}
	for(int i = 1 ; i <= m; i++){
		cout << ans[i] << '\n';
	}
	cout << '\n';

}
int main() {
	ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	int tests = 1;
	// cin >> tests;
	for(int i = 1; i <= tests; i ++){
		solve();
	}
}
#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...