Submission #1206854

#TimeUsernameProblemLanguageResultExecution timeMemory
1206854avohadoSterilizing Spray (JOI15_sterilizing)C++20
80 / 100
5092 ms3380 KiB
#include <bits/stdc++.h>
using namespace std;
#define mod 998244353
#define maxn 200005
#define f first
#define s second
#define ll long long
#define pb(x) push_back(x)
int n, q, k;
int a[maxn];
long long tree[maxn*4];
void bt(int v, int tl, int tr){
    if(tl==tr){
        tree[v]=a[tl];return;
    }
    int m=(tl+tr)/2;
    bt(v*2, tl, m);
    bt(v*2+1, m+1, tr);
    tree[v]=tree[v*2]+tree[v*2+1];
}
void u2(int v,int l, int r, int tl, int tr){
    if(r<tl||tr<l||tree[v]==0){
        return;
    }
    if(tl==tr){
        tree[v]/=k;return;
    }
    int m=(tl+tr)/2;
    u2(v*2,l, r, tl, m);
    u2(v*2+1,l,r, m+1, tr);
    tree[v]=tree[v*2]+tree[v*2+1];
}
void u1(int v,int l, int r, int tl, int tr){
    if(tl==tr){
        tree[v]=r;return;
    }
    int m=(tl+tr)/2;
    if(m<l){
        u1(v*2+1, l, r, m+1, tr);
    }else{
        u1(v*2, l, r, tl, m);
    }
    tree[v]=tree[v*2]+tree[v*2+1];
}
ll res(int v,int l, int r, int tl, int tr){
    if(tl>r||tr<l){
        return 0;
    }else if(tl>=l&&tr<=r){
        return tree[v];
    }
    int m=(tl+tr)/2;
    return res(v*2, l, r, tl, m)+ res(v*2+1, l, r, m+1, tr);
}
void solve(){
    cin >> n >> q >> k;
    for(int i=0; i<n; i++){
        cin >> a[i];
    }
    bt(1, 0, n-1);
    int x, l ,r;
    for(int i=0; i<q; i++){
        cin >> x >> l >> r;
        if(x==1){
            u1(1, l-1, r, 0, n-1);
        }else if(x==2){
            u2(1, l-1, r-1, 0, n-1);
        }else{
            cout << res(1, l-1, r-1, 0, n-1) << "\n";
        }
    }
}
int main(){
    cin.tie(nullptr)->sync_with_stdio(0);
    int t=1;
    //cin >> t;
    while(t--){
        solve();
        cout << "\n";
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...