Tên đăng nhập Điểm ▾ Bài tập Giới thiệu
15001 1701 1
15001 1701 1
15001 1701 1
15001 1701 1
15001 1701 1
15001 1701 1
15001 1701 1
15001 1701 1
15001 1701 1
15001 1701 1
15001
OLP4SC004
HUỲNH CHÍ TÔN
1701 1
15001
OLP4SC045
Hoàng Minh Tuấn
1701 1
15001
OLP4SC041
Lê Xuân Sơn
1701 1
15001
OLP4SC057
Trần Quý Đạt
1701 1
15001
OLP4SC076
Lê Thành Hưng
1701 1
15001
OLP4SC003
LÊ VĂN THỨC
1701 1
15001
OLP4SC009
Đặng Minh Ánh
1701 1
15001
OLP4SC040
Lê Hoàng Nam
1701 1
15001
OLP4SC087
Võ Thanh Hải
1701 1
15001
OLP4SC122
Hoàng Ngọc Bảo Khuê
1701 1
15001
OLP4SC127
Trần Gia Huy
1701 1
15001
OLP4SC129
Vũ Quốc Lâm
1701 1
15001
OLP4SC133
Phạm Quốc Hùng
1701 1
15001
OLP4SC134
Trần Xuân Bách
1701 1
15001
OLP4SC137
Nguyễn Anh Tiến
1701 1
15001 1701 1
15001 1701 1
15001 1701 1
15001
abcd123
Nguyễn Tiến Dũng
1701 1

m=AIT/nF

15001 1701 1

hehehehehehehehehfafhoiahd

15001 1701 1
15001 1701 1
15001 1701 1
15001 1701 1
15001 1701 1
15001 1701 1
15001 1701 1
15001 1701 1

include <iostream>

include <vector>

using namespace std;

struct SegmentTree {
int n;
vector<long long> tree, lazyAdd, lazySet;
vector<bool> isSet;

SegmentTree(int size) : n(size), tree(4 * size), lazyAdd(4 * size), lazySet(4 * size), isSet(4 * size, false) {}

void push(int node, int start, int end) {
    if (isSet[node]) {
        tree[node] = (end - start + 1) * lazySet[node];
        if (start != end) {
            isSet[2 * node] = isSet[2 * node + 1] = true;
            lazySet[2 * node] = lazySet[2 * node + 1] = lazySet[node];
            lazyAdd[2 * node] = lazyAdd[2 * node + 1] = 0;
        }
        isSet[node] = false;
    }
    if (lazyAdd[node] != 0) {
        tree[node] += (end - start + 1) * lazyAdd[node];
        if (start != end) {
            lazyAdd[2 * node] += lazyAdd[node];
            lazyAdd[2 * node + 1] += lazyAdd[node];
        }
        lazyAdd[node] = 0;
    }
}

void updateAdd(int node, int start, int end, int l, int r, long long val) {
    push(node, start, end);
    if (start > end || start > r || end < l) return;
    if (start >= l && end <= r) {
        lazyAdd[node] += val;
        push(node, start, end);
        return;
    }
    int mid = (start + end) / 2;
    updateAdd(2 * node, start, mid, l, r, val);
    updateAdd(2 * node + 1, mid + 1, end, l, r, val);
    tree[node] = tree[2 * node] + tree[2 * node + 1];
}

void updateSet(int node, int start, int end, int l, int r, long long val) {
    push(node, start, end);
    if (start > end || start > r || end < l) return;
    if (start >= l && end <= r) {
        isSet[node] = true;
        lazySet[node] = val;
        lazyAdd[node] = 0;
        push(node, start, end);
        return;
    }
    int mid = (start + end) / 2;
    updateSet(2 * node, start, mid, l, r, val);
    updateSet(2 * node + 1, mid + 1, end, l, r, val);
    tree[node] = tree[2 * node] + tree[2 * node + 1];
}

long long query(int node, int start, int end, int l, int r) {
    push(node, start, end);
    if (start > end || start > r || end < l) return 0;
    if (start >= l && end <= r) return tree[node];
    int mid = (start + end) / 2;
    long long q1 = query(2 * node, start, mid, l, r);
    long long q2 = query(2 * node + 1, mid + 1, end, l, r);
    return q1 + q2;
}

void updateAdd(int l, int r, long long val) { updateAdd(1, 0, n - 1, l, r, val); }
void updateSet(int l, int r, long long val) { updateSet(1, 0, n - 1, l, r, val); }
long long query(int l, int r) { return query(1, 0, n - 1, l, r); }

};

int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);

int n, q;
cin >> n >> q;
vector<int> arr(n);
for (int i = 0; i < n; i++) {
    cin >> arr[i];
}

SegmentTree st(n);
for (int i = 0; i < n; i++) {
    st.updateSet(i, i, arr[i]);
}

while (q--) {
    int type;
    cin >> type;
    if (type == 1) {
        int a, b, x;
        cin >> a >> b >> x;
        st.updateAdd(a - 1, b - 1, x);
    } else if (type == 2) {
        int a, b, x;
        cin >> a >> b >> x;
        st.updateSet(a - 1, b - 1, x);
    } else if (type == 3) {
        int a, b;
        cin >> a >> b;
        cout << st.query(a - 1, b - 1) << "\n";
    }
}

return 0;

}

15039 1701 4
15040 1700 5
15041 1700 11
15042 1700 2
15043 1700 16
15043 1700 16
15045
BL8B23_ThanhTTH
Thái Thị Huyền Thanh
1699 34
15045 1699 34
15045 1699 34
15048 1699 36
15049 1699 6
15050 1699 9
15051 1698 11
15052
bichnhidangiu
BichNhi - 10T
1698 35
15053
linhcute
Đặng Quốc Huy
1698 9

I am a Coder

15054 1697 1
15055 1697 2
15055 1697 2
15055 1697 2
15055 1697 2
15055 1697 2
15055 1697 2
15055 1697 2
15055 1697 2
15055 1697 2
15064 1697 3
15065 1697 10
15066
Thuy_Tram
Trịnh Nguyễn Thùy Trâm-Toán-TH2
1697 36
15067
STRB10Phu
Nguyễn Tri Thiên Phú
1696 9
15068 1695 14
15068
kienbanhzai123
quang va kien
1695 14
15070 1695 5
15071 1694 6
15072 1692 5
15073
hiepbt 1095
Bùi Tuấn Hiệp, Q.Ninh
1692 7
15074 1692 2
15074 1692 2
15074 1692 2
15074 1692 2
15074 1692 2
15074 1692 2
15074 1692 2
15081 1691 6

Không biết định hướng tương lai nghề gì ><

15082 1691 2
15083 1690 10
15084 1690 8
15085 1689 16
15086
STRB04Khoi
Đặng Xuân Minh Khôi
1689 9
15087
P1A2_13_NguyenQuangAnh
Nguyễn Quang Anh
1689 14

MUUUUUUUUUUUUUUU

15088 1688 14
15089 1688 3

Đổi tên đăng nhập sang laptrinhcung123

15089 1688 3
15089 1688 3
15089 1688 3
15089 1688 3
15089
practice23_12
Nguyễn Trọng Văn Viết
1687 2
15095 1686 4
15096 1686 3
15097 1686 14
15098 1685 6
15099 1685 13
15099 1685 13