제출 #1289946

#제출 시각아이디문제언어결과실행 시간메모리
1289946metricSterilizing Spray (JOI15_sterilizing)C++17
80 / 100
5091 ms5728 KiB
#include<bits/stdc++.h>
using namespace std;
struct node{long long s,m;} t[400005];
int n,q,k;vector<long long> a;
void bld(int id,int l,int r){
    if(l==r){t[id]={a[l],a[l]};return;}
    int m=(l+r)/2;
    bld(id*2,l,m);bld(id*2+1,m+1,r);
    t[id].s=t[id*2].s+t[id*2+1].s;
    t[id].m=max(t[id*2].m,t[id*2+1].m);
}
void upd1(int id,int l,int r,int p,long long v){
    if(l==r){t[id]={v,v};return;}
    int m=(l+r)/2;
    if(p<=m)upd1(id*2,l,m,p,v);
    else upd1(id*2+1,m+1,r,p,v);
    t[id].s=t[id*2].s+t[id*2+1].s;
    t[id].m=max(t[id*2].m,t[id*2+1].m);
}
void spray(int id,int l,int r,int u,int v){
    if(t[id].m==0||r<u||v<l) return;
    if(l==r){t[id].s/=k;t[id].m=t[id].s;return;}
    int m=(l+r)/2;
    spray(id*2,l,m,u,v);spray(id*2+1,m+1,r,u,v);
    t[id].s=t[id*2].s+t[id*2+1].s;
    t[id].m=max(t[id*2].m,t[id*2+1].m);
}
long long get(int id,int l,int r,int u,int v){
    if(r<u||v<l) return 0;
    if(u<=l&&r<=v) return t[id].s;
    int m=(l+r)/2;
    return get(id*2,l,m,u,v)+get(id*2+1,m+1,r,u,v);
}
int main(){
    ios::sync_with_stdio(0);cin.tie(0);
    cin>>n>>q>>k;a.resize(n+1);
    for(int i=1;i<=n;i++)cin>>a[i];
    bld(1,1,n);
    while(q--){
        int s,t,u;cin>>s>>t>>u;
        if(s==1) upd1(1,1,n,t,u);
        else if(s==2) spray(1,1,n,t,u);
        else cout<<get(1,1,n,t,u)<<"\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...