Submission #1097028

#TimeUsernameProblemLanguageResultExecution timeMemory
1097028vladiliusFish 3 (JOI24_fish3)C++17
9 / 100
2077 ms35144 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define pb push_back
#define ff first
#define ss second

struct DS{
    vector<ll> a;
    int n;
    DS(int ns){
        n = ns;
        a.resize(n + 1);
    }
    void upd(int p, ll x){
        a[p] = x;
        for (int i = 1; i < p; i++){
            a[i] = min(a[i], x);
        }
    }
    ll get(int l, int r){
        ll out = 0;
        for (int i = l; i <= r; i++){
            out += a[i];
        }
        return out;
    }
};

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int n; ll d; cin>>n>>d;
    vector<ll> a(n + 1);
    for (int i = 1; i <= n; i++){
        cin>>a[i];
    }
    vector<ll> x(n);
    for (int i = 1; i < n; i++){
        x[i] = -ceil(1.0 * (a[i] - a[i + 1]) / d);
    }
    vector<ll> y(n + 1);
    for (int i = 2; i <= n; i++){
        y[i] = y[i - 1] + x[i - 1];
    }
    
    vector<ll> p(n + 1);
    for (int i = 1; i <= n; i++){
        p[i] = p[i - 1] + y[i];
    }
    
    int q; cin>>q;
    vector<pii> end[n + 1];
    for (int i = 1; i <= q; i++){
        int l, r; cin>>l>>r;
        end[r].pb({l, i});
    }

    vector<ll> out(q + 1);
    DS T(n);
    for (int r = 1; r <= n; r++){
        T.upd(r, y[r]);
        for (auto [l, ii]: end[r]){
            ll h = T.get(l, l) - y[l];
            if ((a[l] + h * d) < 0){
                out[ii] = -1;
                continue;
            }
            out[ii] = (p[r] - p[l - 1]) - T.get(l, r);
        }
    }
    
    for (int i = 1; i <= q; i++){
        cout<<out[i]<<"\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...