제출 #1328033

#제출 시각아이디문제언어결과실행 시간메모리
1328033maya_sAddk (eJOI21_addk)C++20
56 / 100
165 ms4824 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int main() {
	ll n, k; cin >> n >> k;
    vector<ll> v(n), p(n+1), s(n+1), t(n+2);
    for(ll i = 0; i < n; i++) cin >> v[i], p[i+1] = p[i] + v[i], s[i+1] = s[i] + (i+1) * v[i];
    // for(ll i = 0; i < n; i++) cout << s[i+1] << " ";
    // cout << "\n";
    t[n] = v[n-1];
    for(ll i = n-2; i >= 0; i--) t[i+1] = t[i+2] + v[i] * (n - i);
    // for(ll i = 0; i < n; i++) cout << t[i+1] << " ";
    // cout << "\n";
    ll q; cin >> q;
    while(q--){
        ll c; cin >> c;
        if(c == 1){
            ll x;
            for(ll i = 0; i < k; i++) cin >> x;
        }
        else{
            ll l, r, m; cin >> l >> r >> m;
            ll sum[3] = {0, 0, 0};
            // cout << l << " " << l + m << " " << r - m << " " << r << "\n";
            sum[0] = s[min(r - m + 1, l + m - 1)] - s[l-1] - (l - 1) * (p[min(r - m + 1, l + m - 1)] - p[l-1]);
            sum[2] = t[max(r - m + 1, l + m - 1)] - t[r+1] - (n - r) * (p[r] - p[max(r - m + 1, l + m - 1) - 1]);
            if(min(r - m + 1, l + m - 1) + 1 <= max(r - m + 1, l + m - 1) - 1) sum[1] = (min(r - m + 1, l + m - 1) - l + 1) * (p[max(r - m + 1, l + m - 1) - 1] - p[min(r - m + 1, l + m - 1)]);
            cout << sum[0] + sum[1] + sum[2] << "\n";
        }
    }

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...