Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const int MAX_N = 1e5;
- int n;
- ll Mul[MAX_N], Add[MAX_N];
- void suf_upd(int pos, ll mul, ll add) {
- while(pos < n) {
- Mul[pos] += mul;
- Add[pos] += add;
- pos |= (pos + 1);
- }
- }
- void upd(int l, int r, ll add) {
- suf_upd(l, add, -add*(l-1));
- suf_upd(r+1, -add, add*r);
- }
- ll get(int pos) {
- ll mul = 0, add = 0;
- for(int i = pos; i >= 0; i = (i & (i+1)) - 1) {
- mul += Mul[i];
- add += Add[i];
- }
- return mul * pos + add;
- }
- ll get(int l, int r) {
- return get(r) - (l > 0 ? get(l-1) : 0);
- }
- int main() {
- cin >> n;
- for(int i = 0; i < n; i++) {
- int a;
- cin >> a;
- upd(i, i, a);
- }
- int q;
- cin >> q;
- while(q--) {
- char c;
- cin >> c;
- if(c == 'g') {
- int pos;
- cin >> pos;
- cout << get(pos-1, pos-1) << ' ';
- }
- else {
- int l, r, x;
- cin >> l >> r >> x;
- upd(l-1, r-1, x);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment