#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+7;
const long long inf=1e18;
int a[N],t[N*4],add[N*4];
/*void push( int v, int tl, int tr )
{
if( add[v] == 0 ) return;
t[v] += (tr - tl + 1) * add[v];
if( tl < tr )
{
add[v + v] += add[v];
add[v + v + 1] += add[v];
}
add[v] = 0;
}*/
void build(int x,int l,int r){
if(l==r){
t[x]=a[l];
return;
}
int m=(l+r)/2;
build(x+x,l,m);
build(x+x+1,m+1,r);
t[x]=t[x+x]+t[x+x+1];
}
/*void up(int x,int l,int r,int pos,int val){
push(x,l,r);
if(l==r){
t[x]=val;
return;
}
int m=(l+r)/2;
if(pos<=m) up(x+x,l,m,pos,val);
else up(x+x+1,m+1,r,pos,val);
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];
}
build(1,1,n);
int q;
cin>> q;
for(int i=0;i<q;i++){
int t;
cin>> t;
if(t==2){
int l,r,m;
cin>> l>>r>>m;
int sum=0;
if((r-l+1)/2<=m){
for(int j=l;j<=r-m+1;j++){
sum+=get(1,1,n,j,j+m-1);
}
}
else {
while(m--){
sum+=get(1,1,n,l,r);
l++;
r--;
}
}
cout<< sum<<endl;
}
else {
int val;
cin>> val;
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |