Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- using namespace std;
- ll n, k, q;
- vector<ll> a, b, add;
- void push(int id) {
- if (add[id] != -1) {
- b[id] = 0;
- for (int i = id * k; i < min((id + 1) * k, n); ++i) {
- a[i] = add[id];
- b[id] += a[i];
- }
- add[id] = -1;
- }
- }
- void update(int l, int r, ll x) {
- int bl = l / k, br = r / k;
- if (bl != br) {
- push(bl);
- push(br);
- for (int i = l; i < (bl + 1) * k; i++) {
- b[bl] -= a[i];
- a[i] = x;
- b[bl] += a[i];
- }
- for (int i = br * k; i <= r; ++i) {
- b[br] -= a[i];
- a[i] = x;
- b[br] += a[i];
- }
- for (int i = bl + 1; i < br; ++i) {
- b[i] = k * x;
- add[i] = x;
- }
- } else {
- push(bl);
- for (int i = l; i <= r; ++i) {
- b[i / k] -= a[i];
- a[i] = x;
- b[i / k] += a[i];
- }
- }
- }
- ll sum(int l, int r) {
- int bl = l / k, br = r / k;
- ll res = 0;
- if (bl != br) {
- push(bl);
- push(br);
- for (int i = l; i < (bl + 1) * k; ++i) {
- res += a[i];
- }
- for (int i = br * k; i <= r; ++i) {
- res += a[i];
- }
- for (int i = bl + 1; i < br; ++i) {
- res += b[i];
- }
- } else {
- push(bl);
- for (int i = l; i <= r; ++i) {
- res += a[i];
- }
- }
- return res;
- }
- int main() {
- freopen("sum.in", "r", stdin);
- freopen("sum.out", "w", stdout);
- cin >> n >> q;
- a.resize(n);
- k = int(sqrt(n) + 0.99);
- b.resize(k + 1, 0);
- add.resize(k + 1, -1);
- while (q--) {
- char op;
- int l, r;
- cin >> op >> l >> r;
- l--; r--;
- if (op == 'A') {
- int x;
- cin >> x;
- update(l, r, x);
- } else {
- cout << sum(l, r) << endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement