Submission #1324893

#TimeUsernameProblemLanguageResultExecution timeMemory
1324893herissonwowwSterilizing Spray (JOI15_sterilizing)C++20
0 / 100
348 ms589824 KiB
#include <iostream>

using namespace std;
const int N = 100001;
int n;
int k;
long long t[N*4];
void upd_plus(int i, int value, int l = 1, int r = n, int pos = 1){
    int mid = (l+r)/2;
    if(l == r){
        t[pos] = value;
        return;
    }
    if (mid >= i){
        upd_plus(i, value, l, mid, pos*2);
    }
    else if (mid < i){
        upd_plus(i, value, mid+1, r, pos*2+1);
    }
    t[pos] = t[pos*2]+t[pos*2+1];
}
void upd_div(int i, int l = 1, int r = n, int pos = 1){
    int mid = (l+r)/2;
    if(l == r){
        t[pos] /= k;
        return;
    }
    if (mid >= i){
        upd_plus(i, l, mid, pos*2);
    }
    else if (mid < i){
        upd_plus(i, mid+1, r, pos*2+1);
    }
    t[pos] = t[pos*2]+t[pos*2+1];
}
long long find_sum(int lb,int rb, int l = 1, int r = n, int pos = 1){
    if(lb>r || rb<l){
        return 0;
    }
    if(l>=lb && r<=rb){
        return t[pos];
    }
    int mid = (l+r)/2;
    return find_sum(lb,rb, l, mid, pos*2) + find_sum(lb,rb, mid+1, r, pos*2);
}
int main()
{
    int q; cin >> n >> q >> k;
    int c[n];
    for(int i = 1; i <= n; i++){
        cin >> c[i];
        upd_plus(i, c[i]);
    }
    if(k==1){
        while(q--){
            int s; cin >> s;
            if(s==1){
                int a, b; cin >> a >> b;
                upd_plus(a,b);
            }
            else if (s==2){
                int l, r;
                cin >> l >> r;
            }
            else if (s==3){
                int l, r; cin >> l >> r;
                cout << find_sum(l,r) << '\n';
            }
        }
        return 0;
    }
    /*
    if(n<=3000 && q<=3000){

    }
    */
    while(q--){
        int s; cin >> s;
        if(s==1){
            int a, b; cin >> a >> b;
            upd_plus(a,b);
        }
        else if (s==2){
            int l, r; cin >> l >> r;
            for(int i = l; i <= r; i++){
                upd_div(i);
                cout << i << ' ';
            }
        }
        else{
            int l, r; cin >> l >> r;
            cout << find_sum(l,r) << '\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...