제출 #1335923

#제출 시각아이디문제언어결과실행 시간메모리
1335923WongYiKaiHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
0 / 100
647 ms327680 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

struct node{
    int s,e;
    ll mx, ans;
    vector<ll> val;
    node *l,*r;
    node (int _s, int _e, ll a[]): s(_s), e(_e), mx(0), ans(0), val({}){
        if (s==e) {
            mx = a[s];
            val.push_back(a[s]);
            ans = 0;
        }
        else{
            l = new node(s, (s+e)>>1, a), r = new node((s+e+2)>>1,e,a);
            combine();
        }
    }
    void combine(){
        mx = max(l->mx,r->mx);
        auto it = lower_bound(r->val.begin(),r->val.end(),l->mx);
        if (it==r->val.begin()){
            ans = max({l->ans,r->ans});
        }
        else{
            it--;
            ans = max({l->ans,r->ans,l->mx+*it});
        }
        merge(l->val.begin(),l->val.end(),r->val.begin(),r->val.end(),back_inserter(val));
    }
    pair<ll,ll> query(int x, int y, ll currmx){
        if (s==x && e==y){
            auto it = lower_bound(val.begin(),val.end(),currmx);
            if (it==val.begin()) return {ans,mx};
            it--;
            return {max({ans,currmx+*it}),mx};
        }
        int m = (s+e)>>1;
        if (y <= m) return l->query(x,y,currmx);
        if (x > m) return r->query(x,y,currmx);
        pair<ll,ll> out = l->query(x,m,currmx);
        pair<ll,ll> q = r->query(m+1,y,out.second);
        return {max(out.first,q.first),max(out.second,q.second)};
    }
    ~node(){
        delete l;
        delete r;
    }
} *root;

int main(){
    ll n,m;
    cin >> n >> m;
    ll w[n];
    for (int i=0;i<n;i++){
        cin >> w[i];
    }
    root = new node(0,n-1,w);
    for (int i=0;i<m;i++){
        ll l,r,k;
        cin >> l >> r >> k;
        l--;
        r--;
        if (root->query(l,r,0).first <= k){
            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...