Submission #1263696

#TimeUsernameProblemLanguageResultExecution timeMemory
1263696mkkkkkkkkAddk (eJOI21_addk)C++20
92 / 100
240 ms6908 KiB
#include <bits/stdc++.h>

using namespace std;

long long tree[2][400000];
vector<long long> vec;

void build(long long node,long long l,long long r)
{
    if(l==r)
    {
            tree[0][node]=vec[l];
            tree[1][node]=vec[l]*(l+1);
    }
    else
    {
        long long m=(l+r)/2;
        build(node*2+1,l,m);
        build(node*2+2,m+1,r);
        tree[0][node]=tree[0][node*2+1]+tree[0][node*2+2];
        tree[1][node]=tree[1][node*2+1]+tree[1][node*2+2];
    }
}

long long query(long long node,long long l,long long r,long long L,long long R,long long t)
{
    if(l>=L && r<=R)
    {
        return tree[t][node];
    }
    else if(l>R || L>r)
    {
        return 0;
    }
    else
    {
        long long m=(l+r)/2;
        return query(node*2+1,l,m,L,R,t)+query(node*2+2,m+1,r,L,R,t);
    }
}




int main()
{
    long long n,k;
    cin>>n>>k;
    for(long long n1=n;n1>0;n1--)
    {
        long long x;
        cin>>x;
        vec.push_back(x);
    }
    long long q;
    cin>>q;
    build(0,0,vec.size()-1);
    for(;q>0;q--)
    {
        long long t;
        cin>>t;
        if(t==1)
        {
            for(long long k1=k;k1>0;k1--)
            {
                long long x;
                cin>>x;
            }

        }
        else
        {
            long long l,r,m;
            cin>>l>>r>>m;
            l--;
            r--;
            if((r-l+1)<2*m)
            {
                m=(r-l+2)-m;
            }
            long long br=0;
            if(m!=1)
            {
                br=br+query(0,0,vec.size()-1,l,l+m-2,1);


                    br=br-query(0,0,vec.size()-1,l,l+m-2,0)*(l);



                    br=br+query(0,0,vec.size()-1,r-m+2,r,0)*(r+2);

                br=br-query(0,0,vec.size()-1,r-m+2,r,1);


            }
            br=br+query(0,0,vec.size()-1,l+m-1,r-m+1,0)*(m);
            cout<<br<<endl;

        }
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...