Submission #1175722

#TimeUsernameProblemLanguageResultExecution timeMemory
1175722manowoAddk (eJOI21_addk)C++20
100 / 100
1480 ms4724 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 1e5 + 1; int t[4 * N], a[N]; void upd( int v, int tl, int tr, int pos ) { if( tl == tr ) { t[v] = a[tl]; return; } int m = (tl + tr) / 2; if( pos <= m ) upd(v + v, tl, m, pos); else upd(v + v + 1, m + 1, tr, pos); t[v] = t[v + v] + t[v + v + 1]; } int get( int v, int tl, int tr, int l, int r ) { if( l > tr || tl > r ) return 0; if( l <= tl && tr <= r ) return t[v]; int m = (tl + tr) / 2; return get(v + v, tl, m, l, r) + get(v + v + 1, m + 1, tr, l, r); } signed main() { int n, k; cin >> n >> k; for( int i = 1; i <= n; ++i ) { cin >> a[i]; upd(1, 1 , n , i); } int q; cin >> q; while(q--) { int type, l, r, m; cin >> type; if( type == 1 ) { vector<int>v; vector<int> w; v.push_back(0); w.push_back(0); for(int i = 1, x; i <= k; ++i ) { cin >> x; v.push_back(x); w.push_back(a[x]); } for( int i = 1; i <= k; ++i ) { if( i == k ) a[v[i]] = w[1]; else a[v[i]] = w[i + 1]; upd(1, 1, n, v[i]); } } else { cin >> l >> r >> m; int ans = get(1, 1, n, l, r) * m; for( int i = l, x = m - 1; x > 0; ++i, --x ) ans -= a[i] * x; for( int i = r, x = m - 1; x > 0; --i, --x ) ans -= a[i] * x; cout << ans << endl; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...