제출 #1334412

#제출 시각아이디문제언어결과실행 시간메모리
1334412nambanana987Sterilizing Spray (JOI15_sterilizing)C++20
0 / 100
5093 ms5276 KiB
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
#define sz(a) (int)a.size()
#define mk make_pair
#define pii pair<int,int>
int n,q,k;
struct Segment{
    vector<int>ma;
    vector<ll>st;

    Segment(int _n) : st(4*(_n+2)),ma(4*(_n+2)){}


    void update_point(int id,int l,int r,int p,int val){
        if(l==r){
            st[id]=val;
            ma[id]=val;
            return;
        }
        int mid=l+r>>1ll;
        if(p<=mid) update_point(id*2,l,mid,p,val);
        else update_point(id*2+1,mid+1,r,p,val);
        st[id]=st[id*2]+st[id*2+1];
        ma[id]=max(ma[id*2],ma[id*2+1]);
    }


    void update_range(int id,int l,int r,int u,int v){
        if(r<u ||l>v ||ma[id]==0) return ;
        if(r==l){
            st[id]/=k;
            ma[id]=st[id];
            return;
        }
        int mid=l+r>>1ll;
        update_range(id*2,l,mid,u,v);
        update_range(id*2+1,mid+1,r,u,v);
        st[id]=st[id*2]+st[id*2+1];
        ma[id]=max(ma[id*2],ma[id*2+1]);
    }

    int get(int id,int l,int r,int u,int v){
        if(r<u ||l>v) return 0;
        if(u<=l && r<=v) return st[id];
        int mid=l+r>>1ll;
        return get(id*2,l,mid,u,v)+get(id*2+1,mid+1,r,u,v);
    }
};

void solve(){
    cin>>n>>q>>k;
    Segment tree(n);
    for(int i=1;i<=n;++i){
        int x;cin>>x;
        tree.update_point(1,1,n,i,x);
    }

    while(q--){
        int type,l,r;cin>>type>>l>>r;
        if(type==1){
            tree.update_point(1,1,n,l,r);
        }
        else if(type==2){
            tree.update_range(1,1,n,l,r);
        }
        else{
            cout<<tree.get(1,1,n,l,r)<<'\n';
        }
    }
}
signed main(){
    ios_base::sync_with_stdio(0);cin.tie(0);

    int T=1;
    //cin>>T;
    while(T--) solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...