Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <vector>
- using namespace std;
- struct node
- {
- long long sum;
- int flag;
- node() : sum(0), flag(-1) {}
- }t[600000];
- void push(int v, int l, int r)
- {
- if (t[v].flag != -1 && l <= r)
- {
- t[v << 1].flag = t[(v << 1) + 1].flag = t[v].flag;
- t[v].sum = (r - l + 1) * 1ll * t[v].flag;
- t[v].flag = -1;
- }
- }
- void upd(int v, int l, int r, int zl, int zr, int val)
- {
- if (l > r || r < zl || l > zr)
- return;
- push(v, l, r);
- int m = (l + r) >> 1;
- if (l >= zl && r <= zr)
- {
- t[v].flag = val;
- push(v, l, r);
- push(v << 1, l, m);
- push((v << 1) + 1, m + 1, r);
- return;
- }
- upd((v << 1), l, m, zl, zr, val);
- upd((v << 1) + 1, m + 1, r, zl, zr, val);
- push(v << 1, l, m);
- push((v << 1) + 1, m + 1, r);
- t[v].sum = t[v << 1].sum + t[(v << 1) + 1].sum;
- }
- long long sum(int v, int l, int r, int zl, int zr)
- {
- if (l > r || l > zr || r < zl)
- return 0 ;
- int m = (l + r) >> 1;
- push(v, l, r);
- push(v << 1, l, m);
- push((v << 1) + 1, m + 1, r);
- if (l >= zl && r <= zr)
- return t[v].sum;
- return (sum(v << 1, l, m, zl, zr) + sum((v << 1) + 1, m + 1, r, zl, zr));
- }
- int main()
- {
- freopen("sum.in", "r", stdin);
- freopen("sum.out", "w", stdout);
- ios_base :: sync_with_stdio(false);
- int n, k;
- cin >> n >> k;
- char c;
- int l, r, val;
- while (k--)
- {
- cin >> c >> l >> r;
- l--, r--;
- if (c == 'A')
- {
- cin >> val;
- upd(1, 0, n - 1, l, r, val);
- }
- else
- cout << sum(1, 0, n - 1, l, r) << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment