Submission #1321459

#TimeUsernameProblemLanguageResultExecution timeMemory
1321459888313666Addk (eJOI21_addk)C++20
0 / 100
20 ms2040 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define _ <<' '<<
#define print(x) cout<<#x<<": "<<(x)<<'\n'
int n,k,q;
vector<ll> a, pref, tref;

ll sum(const int l, const int r) { //inc exc
    return tref[r-1]-tref[l-1]-(pref[r-1]-pref[l-1])*(l-1);
}

ll rsum(const int l, const int r) { //inc exc
    const auto d=r-l;
    return (pref[r-1]-pref[l-1])*(d+1)-sum(l, r);
}

int main(){
    cin.tie(0)->sync_with_stdio(0);
    cout.tie(0);
    cin>>n>>k;
    a.resize(n+1);
    pref.assign(n+1, 0);
    tref=pref;
    for (int i=1; i<=n; ++i) {
        cin>>a[i];
        pref[i]=pref[i-1]+a[i];
        tref[i]=pref[i-1]+a[i]*i;
    }
    cin>>q;
    for (int i=0; i<q; i++) {
        int t;
        cin>>t;
        if (t==1) {
            int x;
            for (int i=0; i<k; i++) cin>>x;
            continue;
        }
        int l, r, m;
        cin>>l>>r>>m;
        const int d=r-l+1;
        //cout<<d<<endl;
        if (m>(d>>1)) m=d+1-m;
        //cout<<m<<endl;
        //cout<<sum(l, l+m-1)<<endl;
        //cout<<r-m+2 _ r+1<<endl;
        //cout<<rsum(r-m+2, r+1)<<endl;
        //cout<<(r-m+2-(l+m-1))*m<<endl;
        ll ans=sum(l, l+m-1)+rsum(r-m+2, r+1)+(r-m+2-(l+m-1))*m;
        cout<<ans<<'\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...