Submission #1345902

#TimeUsernameProblemLanguageResultExecution timeMemory
1345902khanhphucscratchHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
0 / 100
1356 ms142180 KiB
#include<bits/stdc++.h>
#define int long long
using namespace std;
int st[4000020], lazy[4000020];
void update(int node, int l, int r, int tl, int tr, int v)
{
    if(l > tr || r < tl) return;
    if(l >= tl && r <= tr) lazy[node] += v;
    else{
        update(node*2, l, (l+r)/2, tl, tr, v);
        update(node*2+1, (l+r)/2+1, r, tl, tr, v);
        st[node] = max(st[node*2] + lazy[node*2], st[node*2+1] + lazy[node*2+1]);
    }
}
int query(int node, int l, int r, int tl, int tr)
{
    if(l > tr || r < tl) return -1e18;
    if(l >= tl && r <= tr) return st[node] + lazy[node];
    else return max(query(node*2, l, (l+r)/2, tl, tr), query(node*2+1, (l+r)/2+1, r, tl, tr)) + lazy[node];
}
vector<pair<int, int>> queries[1000005];
vector<int> ad[1000005];
int a[1000005], tout[1000005], ans[1000005];
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n, q; cin>>n>>q;
    for(int i = 1; i <= n; i++) cin>>a[i];
    a[0] = 3e9;
    stack<int> cur; cur.push(0);
    for(int i = 1; i <= n; i++){
        while(a[cur.top()] < a[i]){
            tout[cur.top()] = i; cur.pop();
        }
        ad[cur.top()].push_back(i);
        cur.push(i);
    }
    while(cur.size() > 0){
        tout[cur.top()] = n; cur.pop();
    }
    for(int test = 1; test <= q; test++){
        int l, r, x; cin>>l>>r>>x;
        ans[test] = x; queries[l].push_back({r, test});
    }
    for(int i = 1; i <= n; i++) update(1, 1, n, i, i, a[i] + a[0]);
    for(int i = 0; i <= n; i++){
        //Solve all current queries
        update(1, 1, n, i, i, -2*a[i]);
        for(pair<int, int> j : queries[i]) ans[j.second] -= query(1, 1, n, i, j.first);
        for(int v : ad[i]){
            update(1, 1, n, v, tout[v], -a[i] + a[v]);
        }
    }
    for(int i = 1; i <= q; i++){
        //cerr<<"A"<<ans[i]<<endl;
        if(ans[i] >= 0) cout<<1<<'\n';
        else cout<<0<<'\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...