#include <bits/stdc++.h>
// Author: Kazuki_Will_Win_VOI_8703
#define fi first
#define se second
#define pii pair<int, int>
#define int long long
#define all(a) a.begin(), a.end()
using namespace std;
const int mn = 1e5 + 5, inf = 1e18;
int n, q, k, a[mn];
struct node{
int mx, val;
node operator+ (const node& other){
node res = {0, 0};
res.mx = max(mx, other.mx);
res.val = val + other.val;
return res;
}
} st[mn << 2];
void build(int id, int l, int r){
if(l == r){
st[id].mx = a[l];
st[id].val = a[l];
return;
}
int mid = (l + r) >> 1;
build(id << 1, l, mid);
build(id << 1 | 1, mid + 1, r);
st[id] = st[id << 1] + st[id << 1 | 1];
}
void update_range(int id, int l, int r, int u, int v){
if(l > v || r < u || st[id].mx == 0) return;
if(l == r){
st[id].mx /= k;
st[id].val /= k;
return;
}
int mid = (l + r) >> 1;
update_range(id << 1, l, mid, u, v);
update_range(id << 1 | 1, mid + 1, r, u, v);
st[id] = st[id << 1] + st[id << 1 | 1];
}
void update(int id, int l, int r, int pos, int val){
if(l > pos || r < pos) return;
if(l == r){
st[id].mx = val;
st[id].val = val;
return;
}
int mid = (l + r) >> 1;
update(id << 1, l, mid, pos, val);
update(id << 1 | 1, mid + 1, r, pos, val);
st[id] = st[id << 1] + st[id << 1 | 1];
}
int get(int id, int l, int r, int u, int v){
if(l > v || r < u) return 0;
if(l >= u && r <= v) return st[id].val;
int mid = (l + r) >> 1;
return get(id << 1, l, mid, u, v) + get(id << 1 | 1, mid + 1, r, u, v);
}
void solve(){
cin >> n >> q >> k;
for(int i = 1; i <= n; i ++) cin >> a[i];
build(1, 1, n);
while(q--){
int t, u, v; cin >> t >> u >> v;
if(t == 1) update(1, 1, n, u, v);
else if(t == 2){
if(k != 1) update_range(1, 1, n, u, v);
}
else cout << get(1, 1, n, u, v) << '\n';
}
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int t = 1;
// cin >> t;
while(t--) solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |