제출 #1348992

#제출 시각아이디문제언어결과실행 시간메모리
1348992Born_To_LaughHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
565 ms74828 KiB
// Born_To_Laugh - Hughie Do
#include <bits/stdc++.h>
#define alle(AC) AC.begin(), AC.end()
#define fi first
#define se second
using namespace std;
typedef long long ll;
[[maybe_unused]] const int MOD = 998244353, INF = 1e9 + 7;
class SegTree
{
    private:
        int n;
        vector<int> tree;
        void upd(int id, int l, int r, int pos, int val){
            if(l == r){
                tree[id] = max(tree[id], val);
                return;
            }
            int mid = (l + r) >> 1;
            if(pos <= mid) upd(id << 1, l, mid, pos, val);
            else upd(id << 1|1, mid + 1, r, pos, val);
            tree[id] = max(tree[id << 1], tree[id << 1|1]);
        }
        int qr(int id, int l, int r, int lo, int hi){
            if(l > hi || r < lo) return 0;
            else if(l >= lo && r <= hi) return tree[id];
            int mid = (l + r) >> 1;
            return max(qr(id << 1, l, mid, lo, hi), qr(id << 1|1, mid + 1, r, lo, hi));
        }
    public:
        void init(int len){
            n = len;
            tree.assign(n << 2, 0);
        }
        void upd(int pos, int val){
            upd(1, 1, n, pos, val);
        }
        int qr(int l, int r){
            return qr(1, 1, n, l, r);
        }
};

const int maxn = 1e6 + 10;
int n, q;
int a[maxn], ans[maxn];//0 = ok, 1 = deo ok
SegTree st;
vector<int> stc;

int ls[maxn];//ls[x] = l co r = x
vector<pair<int, pair<int, int>>> los[maxn];//los[x] = cac qr co hi = x
//i, {l, k}

void solve(){
    cin >> n >> q;
    st.init(n);
    for(int i=1; i<=n; ++i) cin >> a[i];
    for(int i=1; i<=n; ++i){
        while(!stc.empty() && a[stc.back()] <= a[i]) stc.pop_back();
        if(!stc.empty()) ls[i] = stc.back();
        stc.push_back(i);
    }
    for(int i=1; i<=q; ++i){
        int l, r, k;cin >> l >> r >> k;
        los[r].push_back({i, {l, k}});
    }
    for(int i=1; i<=n; ++i){
        if(ls[i] != 0) st.upd(ls[i], a[ls[i]] + a[i]);
        for(auto &elm: los[i]){
            int id = elm.fi, l = elm.se.fi, k = elm.se.se;
            if(st.qr(l, i) > k) ans[id] = 1;
        }
    }
    for(int i=1; i<=q; ++i){
        if(ans[i]) cout << 0 << '\n';
        else cout << 1 << '\n';
    }
}
signed main(){
    // freopen("inp.txt", "r", stdin);
    // freopen("out.txt", "w", stdout);
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    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...