제출 #1336934

#제출 시각아이디문제언어결과실행 시간메모리
1336934nguyenkhangninh99Sterilizing Spray (JOI15_sterilizing)C++20
100 / 100
106 ms2960 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
struct SegmentTree{
    int st[400000];
    void set(int id, int l, int r, int p, int val){
        if(l == r) st[id] = val;
        else{
            int mid = (l + r) / 2;
            if(p <= mid) set(id * 2, l, mid, p, val);
            else set(id * 2 + 1, mid + 1, r, p, val);
            st[id] = st[id * 2] + st[id * 2 + 1];
        }
    }
    void update(int id, int l, int r, int u, int v, int k){
        if(r < u || v < l || st[id] == 0) return;
        if(l == r) st[id] /= k;
        else{
            int mid = (l + r) / 2;
            update(id * 2, l, mid, u, v, k);
            update(id * 2 + 1, mid + 1, r, u, v, k);
            st[id] = st[id * 2] + st[id * 2 + 1];
        }
    }
    int get(int id, int l, int r, int u, int v){
        if(r < u || v < l) return 0;
        if(u <= l && r <= v)  return st[id];
        int mid = (l + r) / 2;
        return get(id * 2, l, mid, u, v) + get(id * 2 + 1, mid + 1, r, u, v);
    }
} tree;

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    int n, q, k; cin >> n >> q >> k;
    for(int i = 1; i <= n; i++){
        int x; cin >> x;
        tree.set(1, 1, n, i, x);
    }
    while(q--){
        int a, b, c; cin >> a >> b >> c;
        if(a == 1) tree.set(1, 1, n, b, c);
        else if(a == 2 && k != 1) tree.update(1, 1, n, b, c, k);
        else if(a == 3) cout << tree.get(1, 1, n, b, c) << "\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...