Submission #1341097

#TimeUsernameProblemLanguageResultExecution timeMemory
1341097alexddFish 3 (JOI24_fish3)C++20
9 / 100
2097 ms27488 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int INF = 1e18;

int n,d;
int c[300005];
int prefr[300005];
int rez[300005], qle[300005], qri[300005];
vector<int> qrys_ofri[300005];
int val[300005];
signed main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin>>n>>d;
    for(int i=1;i<=n;i++)
    {
        cin>>c[i];
        prefr[i] = prefr[i-1] + ((c[i] - c[i-1]) % d + d) % d;
        val[i] = c[i] - prefr[i];
        //cerr<<i<<" "<<prefr[i]<<" prefr\n";
        //cerr<<i<<" "<<val[i]<<" val\n";
    }
    int q;
    cin>>q;
    for(int i=1;i<=q;i++)
    {
        cin>>qle[i]>>qri[i];
        qrys_ofri[qri[i]].push_back(i);
    }

    for(int ri=1;ri<=n;ri++)
    {
        for(int qid:qrys_ofri[ri])
        {
            int le = qle[qid];
            int mnm = INF, sum = 0, tot = 0;
            int dif = prefr[le] - c[le] % d;

            for(int i=ri;i>=le;i--)
            {
                mnm = min(mnm, val[i]);
                sum += mnm;
                tot += val[i];
            }
            if(mnm + dif < 0)
            {
                rez[qid] = -1;
                continue;
            }
            assert((tot - sum) % d == 0);
            rez[qid] = (tot - sum) / d;
        }
    }
    for(int i=1;i<=q;i++)
        cout<<rez[i]<<"\n";
    return 0;
}
#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...