#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e5 + 5;
int n, q, K, t[N], u[N], v[N], a[N];
ll seg[N << 2];
void build(int id, int l, int r){
if (l == r){
seg[id] = a[l];
return;
}
int mid = l + ((r - l) >> 1);
build(id << 1, l, mid);
build((id << 1) | 1, mid + 1, r);
seg[id] = seg[id << 1] + seg[(id << 1) | 1];
}
void update(int id, int l, int r, int pos, int val){
while (l < r){
int mid = l + ((r - l) >> 1);
id <<= 1;
if (pos <= mid)
r = mid;
else {
l = mid + 1;
id |= 1;
}
}
seg[id] = val;
id >>= 1;
while (id > 0){
seg[id] = seg[id << 1] + seg[(id << 1) | 1];
id >>= 1;
}
}
void re(int id, int l, int r, int u, int v){
if (r < u || v < l || !seg[id]) return;
if (l == r){
seg[id] /= K;
return;
}
int mid = l + ((r - l) >> 1);
re(id << 1, l, mid, u, v);
re((id << 1) | 1, mid + 1, r, u, v);
seg[id] = seg[id << 1] + seg[(id << 1) | 1];
}
ll get(int id, int l, int r, int u, int v){
if (r < u || v < l) return 0;
if (u <= l && r <= v) return seg[id];
int mid = l + ((r - l) >> 1);
return get(id << 1, l, mid, u, v) + get((id << 1) | 1, mid + 1, r, u, v);
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
if (fopen("gray.inp", "r")){
freopen("gray.inp", "r", stdin);
freopen("gray.out", "w", stdout);
}
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)
re(1, 1, n, u, v);
} else
cout << get(1, 1, n, u, v) << '\n';
}
}
/*
5 10 3
1
2
8
1
3
1 2 5
2 3 5
3 2 5
2 1 4
1 3 2
3 3 5
1 2 4
2 1 2
1 1 4
3 1 5
*/
컴파일 시 표준 에러 (stderr) 메시지
sterilizing.cpp: In function 'int main()':
sterilizing.cpp:63:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
63 | freopen("gray.inp", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
sterilizing.cpp:64:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
64 | freopen("gray.out", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~| # | 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... |