제출 #125018

#제출 시각아이디문제언어결과실행 시간메모리
125018trinhhungSterilizing Spray (JOI15_sterilizing)C++14
0 / 100
106 ms3576 KiB
#include<bits/stdc++.h> using namespace std; const int N = 1e6 + 5; int n, m, q; int a[N], node[4 * N], lazy[4 * N]; #define int long long void down(int i, int l, int r){ if(l > r) return; node[i] /= lazy[i]; if(l == r){ lazy[i] = 1; return; } lazy[i * 2] *= lazy[i]; lazy[i * 2 + 1] *= lazy[i]; lazy[i] = 1; } void build_tree(int i, int l, int r){ if(l > r) return; if(l == r){ node[i] = a[l]; return; } int mid = (l + r) / 2; build_tree(i * 2, l, mid); build_tree(i * 2 + 1, mid + 1, r); node[i] = node[i * 2] + node[i * 2 + 1]; } void update(int i, int l, int r, int pos, int val){ down(i, l, r); if(l > r || l > pos || r < pos) return; if(l == r){ if(l == pos) node[i] = val; return; } int mid = (l + r) / 2; update(i * 2, l, mid, pos, val); update(i * 2 + 1, mid + 1, r, pos, val); node[i] = node[i * 2] + node[i * 2 + 1]; } void update_2(int i, int l, int r, int a, int b){ down(i, l, r); if(l > r || l > b || r < a) return; if(l >= a && r <= b){ lazy[i] *= m; down(i, l, r); return; } int mid = (l + r) / 2; update_2(i * 2, l, mid, a, b); update_2(i * 2 + 1, mid + 1, r, a, b); node[i] = node[i * 2] + node[i * 2 + 1]; } int get(int i, int l, int r, int a, int b){ down(i, l, r); if(l > r || l > b || r < a) return 0; if(l >= a && r <= b) return node[i]; int mid = (l + r) / 2; return get(i * 2, l, mid, a, b) + get(i * 2 + 1, mid + 1, r, a, b); } signed main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> q >> m; for(int i = 1; i <= 4 * n; ++ i) lazy[i] = 1; for(int i = 1; i <= n; ++ i) cin >> a[i]; build_tree(1, 1, n); while(q --){ int x, y, z; cin >> x >> y >> z; if(x == 1){ update(1, 1, n, y, z); //for(int i = 1; i <= 4 * n; ++ i) cout << node[i] << ' '; //cout << endl; } else if(x == 2) update_2(1, 1, n, y, z); else cout << get(1, 1, n , y, z) << '\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...