Submission #1332971

#TimeUsernameProblemLanguageResultExecution timeMemory
1332971patgraFish 3 (JOI24_fish3)C++20
9 / 100
2095 ms23700 KiB
#include <bits/stdc++.h>

#define rep(a,b,c) for(auto a = (b); a != (c); a++)
#define repD(a,b,c) for(auto a = (b); a != (c); a--)
#define repIn(a, b) for(auto& a : (b))
#define repIn2(a, b, c) for(auto& [a, b] : (c))

constexpr bool dbg = 0;
#define DEBUG if constexpr(dbg)
#define DC DEBUG std::cerr
#define eol std::endl

#define int long long
#define ld long double
#define pb push_back
#define rg ranges

using namespace std;

constexpr int inf = 1e18;

int n, D, q;
vector<int> a, b, c, ap, ans, minAp, pref;
vector<array<int, 3>> queries;

int32_t main() {
    ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
    cin >> n >> D;
    a.resize(n);
    b.resize(n);
    c.resize(n);
    ap.resize(n);
    pref.resize(n);
    repIn(i, c) cin >> i;
    cin >> q;
    queries.resize(q);
    ans.resize(q);
    minAp.resize(q);
    rep(i, 0, q) cin >> queries[i][0] >> queries[i][1], queries[i][2] = i;
    rep(i, 0, n) a[i] = c[i] / D, b[i] = c[i] % D;
    rg::sort(queries);
    for(auto& [l, r, qi] : queries) l--, r--;
    for(auto [l, r, qi] : queries) {
        rep(i, l, r + 1) {
            ap[i] = a[i];
            rep(j, l + 1, i + 1) ap[i] -= (b[j] < b[j - 1]);
            ans[qi] += ap[i];
            DC << ap[i] << ' ';
        }
        DC << eol;
    }
    rep(i, 0, n) {
        ap[i] = a[i];
        rep(j, 1, i + 1) ap[i] -= (b[j] < b[j - 1]);
    }
    for(auto [l, r, qi] : queries) {
        int minSuf = inf;
        repD(i, r, l - 1) {
            minSuf = min(minSuf, ap[i]);
            ans[qi] -= minSuf;
        }
        minAp[qi] = minSuf;
        //if(minSuf < 0) ans[qi] = -1;
    }
    int sum = 0;
    rep(i, 1, n) sum += b[i] < b[i - 1], pref[i] = sum;
    for(auto [l, r, qi] : queries) {
        sum = pref[l];
        ans[qi] -= sum * (r - l + 1);
        if(minAp[qi] + sum < 0) ans[qi] = -1;
    }
    repIn(i, ans) cout << 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...