Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- const int MAXN = 1e5 + 100;
- long long t[MAXN * 4], f[MAXN * 4];
- void push(int v, int d)
- {
- if(f[v] != -1)
- {
- t[v] = d * f[v];
- f[v * 2] = f[v * 2 + 1] = f[v];
- f[v] = -1;
- }
- }
- void update(int v, int l, int r, int ql, int qr, int val)
- {
- push(v, r - l + 1);
- if(ql > qr)
- return;
- if(l == ql and r == qr)
- {
- f[v] = val;
- push(v, r - l + 1);
- }
- else
- {
- int m = (l + r) / 2;
- update(v * 2, l, m, ql, min(qr, m), val);
- update(v * 2 + 1, m + 1, r, max(m + 1, ql), qr, val);
- t[v] = t[v * 2] + t[v * 2 + 1];
- }
- }
- long long sum(int v, int l, int r, int ql, int qr)
- {
- if(ql > qr)
- return 0;
- push(v, r - l + 1);
- if(ql == l and qr == r)
- return t[v];
- int m = (l + r) / 2;
- return sum(v * 2, l, m, ql, min(m, qr)) + sum(v * 2 + 1, m + 1, r, max(m + 1, ql), qr);
- }
- int main()
- {
- //ускорение ввода
- ios::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- //Ввод-вывод из файла
- freopen("sum.in", "r", stdin);
- freopen("sum.out", "w", stdout);
- //инициализачия флагов
- fill(f, f + 4 * MAXN, -1);
- //ввод
- int n, k;
- cin >> n >> k;
- while(k--)
- {
- char t;
- int l, r;
- cin >> t >> l >> r;
- l--, r--;
- if(t == 'A')
- {
- int x;
- cin >> x;
- update(1, 0, n - 1, l, r, x);
- }
- else
- cout << sum(1, 0, n - 1, l, r) << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement