Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // do array fast cin/cout [set_segm, get_segm]
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- vector<ll> a;
- vector<bool> all;
- void push(int v, int l, int r){
- all[(v<<1) + 1] = true;
- all[(v<<1) + 2] = true;
- ll y = a[v] / (r-l);
- int m = (r+l)>>1;
- a[(v<<1) +1] = y* (m - l);
- a[(v<<1) +2] = y* (r - m);
- }
- void setx(int v, int l, int r, int lr, int rr, ll y){
- if(r <= lr || rr <= l)
- return;
- if(lr <= l && r <= rr){
- all[v] = true;
- a[v] = (r - l) * y;
- return;
- }
- if(all[v])
- push(v, l, r);
- all[v] = false;
- int m = (r+l)/2;
- setx((v<<1) +1, l, m, lr, rr, y);
- setx((v<<1) +2, m, r, lr, rr, y);
- a[v] = a[(v<<1) + 1] + a[(v<<1) + 2];
- }
- ll get(int v, int l, int r, int lr, int rr){
- if(r <= lr || rr <= l)
- return 0;
- if(lr <= l && r <= rr)
- return a[v];
- if(all[v])
- push(v, l, r);
- int m = (r+l)>>1;
- return get((v<<1)+1, l, m, lr, rr) + get((v<<1)+2, m, r, lr, rr);
- }
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- int n, m, t, l, r, v;
- cin >> n >> m;
- a.resize(n<<2, 0);
- all.resize(n<<2, true);
- vector<ll> ans(0);
- int q[m][4];
- for(int i = 0; i < m; i++){
- cin >> q[i][0] >> q[i][1] >> q[i][2];
- if(q[i][0] == 1)//{
- cin >> q[i][3];
- }
- for(auto i: q){
- if(i[0] == 1)//{
- setx(0, 0, n, i[1], i[2], i[3]);
- else
- ans.push_back(get(0, 0, n, i[1], i[2]));
- }
- for(auto i: ans)
- cout << i << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement