Submission #1172740

#TimeUsernameProblemLanguageResultExecution timeMemory
1172740dbekarysAddk (eJOI21_addk)C++20
0 / 100
2096 ms1916 KiB
#include <bits/stdc++.h>
#pragma optimize("g", on)
#pragma GCC optimize ("03")
#pragma GCC target ("sse,sse2,sse3,ssse3,sse4,popcnt,abm,avx2,mmx,fma,avx,tune=native")
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...