제출 #1358001

#제출 시각아이디문제언어결과실행 시간메모리
1358001naneosmicLegendary Dango Eater (JOI26_dango)C++20
0 / 100
221 ms21556 KiB
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
int k;
void solve(){
    int n,q;
    cin>>n>>q>>k;
    vector<int>v(n);
    for(int i=0;i<n;i++){
        cin>>v[i];
    }
    if(n%2==0){
        v.pop_back();
        n--;
    }
    vector<int>pref(n+1);
    pref[0]=0;
    for(int i=0;i<n;i++){
        pref[i+1]=pref[i]+(i%2==0?v[i]:-v[i]);
        //cout<<pref[i+1]<<' ';
    }
    //cout<<endl;
    vector<int>bigpref(n+1,0);
    bigpref[0]=0;
    int pr1=0,pr2=0;
    //smth
    vector<int>breaks;
    breaks.push_back(-1);
    for(int i=0;i<n;i++){
        if(i%2==0)continue;
        if(v[i]>=(max(v[i-1]%k,v[i+1]%k))){
            breaks.push_back(i);
            int add=(pref[i]-pr1)/k;
            pr2+=add;
            bigpref[i]=pr2;
            pr1=pref[i+1];
        }
    }
    breaks.push_back(n);
    //for(auto x:breaks){cout<<x<<' ';}cout<<endl;
    //for(auto x:pref){cout<<x<<' ';}cout<<endl;
    //for(auto x:bigpref){cout<<x<<' ';}cout<<endl;
    for(int i=0;i<q;i++){
        int l,r;
        cin>>l>>r;
        l--;
        r--;
        if(l%2!=0)l++;
        if(r%2!=0)r--;
        auto it=lower_bound(breaks.begin(),breaks.end(),l);
        int next=*it;
        it=lower_bound(breaks.begin(),breaks.end(),r);
        it--;
        int prev=*it;
        int ans=0;
        //cout<<l<<' '<<next<<' '<<prev<<' '<<r<<endl;
        if(prev<next){
            ans+=(pref[r+1]-pref[l])/k;
            //cout<<(pref[r+1]-pref[l])/k<<' ';
        }else{
            ans+=(pref[next]-pref[l])/k;
            ans+=bigpref[prev]-bigpref[next];
            ans+=(pref[r+1]-pref[prev+1])/k;
            //cout<<(pref[next]-pref[l])/k<<' '<<bigpref[prev]-bigpref[next]<<' '<<(pref[r+1]-pref[prev+1])/k;
        }
        //cout<<endl;
        cout<<ans<<endl;
    }
}
signed main(){
    cin.tie(0);
    ios::sync_with_stdio(false);
    int t=1;
    //cin>>t;
    while(t--)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...
#Verdict Execution timeMemoryGrader output
Fetching results...