#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |