Submission #1173347

#TimeUsernameProblemLanguageResultExecution timeMemory
1173347dbekarysAddk (eJOI21_addk)C++20
100 / 100
1578 ms4768 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> 
#include <ext/pb_ds/tree_policy.hpp> 
#define pll pair<long long,long long>
#define int long long
using namespace std;
/*using namespace __gnu_pbds; 
template<class T>
using ordered_set=tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;*/
const int mod=1e9+7;
const int N=1e5+1;
const long long inf=1e18;

int a[N],t[N*4],add[N*4];
void up(int x,int l,int r,int pos){
    if(l==r){
        t[x]=a[l];
        return;
    }
    int m=(l+r)/2;
    if(pos<=m) up(x+x,l,m,pos);
    else up(x+x+1,m+1,r,pos);
    t[x]=t[x+x]+t[x+x+1];
}
int get(int x,int l,int r,int ll,int rr){
    if(l>rr || r<ll){
        return 0;
    }
    if(ll<=l && r<=rr){
        return t[x];
    }
    int m=(l+r)/2;
    return get(x+x,l,m,ll,rr)+get(x+x+1,m+1,r,ll,rr);
}
signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie();
    
    int n,k;
    cin>> n>>k;
    for(int i=1;i<=n;i++){
        cin>> a[i];
        up(1,1,n,i);
    }
    int q;
    cin>> q;
    while(q--){
        int t;
        cin>> t;
        if(t==1){
            vector< int >v, vv;
            v.push_back( 0 );
            vv.push_back( 0 );
            for( int i = 1, x; i <= k; ++i )
            {
                cin >>x;
                v.push_back( x );
                vv.push_back( a[x] );
            }
            for( int i = 1; i <= k; ++i )
            {
                if( i == k )
                    a[v[i]] = vv[1];
                else
                    a[v[i]] = vv[i + 1];
                up(1, 1, n, v[i]);
            }
        }
        else {
            int l,r,m;
            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...