Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int maxn = 1e4 + 7, NEUTRAL = 0;
- int t[4 * maxn], c[4 * maxn];
- void push(int v) {
- c[2 * v + 1] += c[v];
- c[2 * v + 2] += c[v];
- c[v] = 0;
- return;
- }
- void update(int v, int l, int m, int r) {
- t[v] = t[2 * v + 1] + c[2 * v + 1] * (m - l) +
- t[2 * v + 2] + c[2 * v + 2] * (r - m);
- return;
- }
- void change(int v, int l, int r, int askl, int askr, int val) {
- if (askr <= l || r <= askl) {
- return;
- }
- if (askl <= l && r <= askr) {
- c[v] += val;
- return;
- }
- int m = (r + l) / 2;
- change(2 * v + 1, l, m, askl, askr, val);
- change(2 * v + 2, m, r, askl, askr, val);
- update(v, l, m, r);
- return;
- }
- int ask(int v, int l, int r, int askl, int askr) {
- if (askr <= l || r <= askl) {
- return NEUTRAL;
- }
- if (askl <= l && r <= askr) {
- return t[v] + c[v] * (r - l);
- }
- push(v);
- int m = (r + l) / 2;
- update(v, l, m, r);
- return ask(2 * v + 1, l, m, askl, askr) + ask(2 * v + 2, m, r, askl, askr);
- }
- signed main() {
- ios::sync_with_stdio(0);
- cin.tie(0);
- int n, m;
- cin >> n >> m;
- for (int i = 0; i < m; i++) {
- int type, l, r, s;
- cin >> type;
- if (type == 1) {
- cin >> l >> r >> s;
- change(0, 0, n, l, r, s);
- }
- else {
- cin >> l >> r;
- cout << ask(0, 0, n, l, r) << "\n";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement