#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define u128 unsigned __int128
#define i128 __int128
#define sz(x) (int)x.size()
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb push_back
#define eb emplace_back
#define mt make_tuple
#define mp make_pair
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pli pair<ll, int>
#define pil pair<int, ll>
#define ff first
#define ss second
const ll inf = 9e18;
const int iinf = 2e9;
const int N = 1e5;
const ll MOD = 1e9 + 7;
vector<ll> t;
void build(int v, int tl, int tr, vector<int>& a){
if (tl + 1 == tr){
t[v] = a[tl];
return;
}
int tm = tl + tr >> 1;
build(2 * v + 1, tl, tm, a);
build(2 * v + 2, tm, tr, a);
t[v] = t[2 * v + 1] + t[2 * v + 2];
}
void upd1(int v, int tl, int tr, int pos, int val){
if (tl + 1 == tr){
t[v] = val;
return;
}
int tm = tl + tr >> 1;
if (pos < tm)
upd1(2 * v + 1, tl, tm, pos, val);
else
upd1(2 * v + 2, tm, tr, pos, val);
t[v] = t[2 * v + 1] + t[2 * v + 2];
}
void upd2(int v, int tl, int tr, int ql, int qr, int k){
if (t[v] == 0 || qr <= tl || ql >= tr)
return;
if (tl + 1 == tr){
t[v] /= k;
return;
}
int tm = tl + tr >> 1;
upd2(2 * v + 1, tl, tm, ql, qr, k);
upd2(2 * v + 2, tm, tr, ql, qr, k);
t[v] = t[2 * v + 1] + t[2 * v + 2];
}
ll get(int v, int tl, int tr, int ql, int qr){
if (qr <= tl || ql >= tr)
return 0ll;
if (ql <= tl && tr <= qr)
return t[v];
int tm = tl + tr >> 1;
return get(2 * v + 1, tl, tm, ql, qr) + get(2 * v + 2, tm, tr, ql, qr);
}
void solution(){
int k, n, q;
cin >> n >> q >> k;
vector<int> c(n);
t.resize(4 * n);
for (int i = 0; i < n; ++i)
cin >> c[i];
build(0, 0, n, c);
for (int i = 0; i < q; ++i){
int t, l, r;
cin >> t >> l >> r;
--l;
if (t == 1){
upd1(0, 0, n, l, r);
} else if (t == 2){
if (k != 1)
upd2(0, 0, n, l, r, k);
} else{
cout << get(0, 0, n, l, r) << '\n';
}
}
}
signed main(/* Kurmankul Nurislam */){
//freopen("fcolor.in", "r", stdin);
//freopen("fcolor.out", "w", stdout);
cin.tie(nullptr) -> sync_with_stdio(false);
int t = 1;
//cin >> t;
while (t--){
solution();
//cout << '\n';
}
}
# | 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... |