Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- long long int t[4*10000];
- long long int sum (int v, int tl, int tr, int l, int r) {
- if (l > r)
- return 0;
- if (l == tl && r == tr)
- return t[v];
- int tm = (tl + tr) / 2;
- return sum (v*2+1, tl, tm, l, min(r,tm))
- + sum (v*2+2, tm+1, tr, max(l,tm+1), r);
- }
- void add(int v, int tl, int tr, int l, int r, int add) {
- if (l > r)
- return;
- if (l == tl && tr == r)
- t[v] += add;
- else {
- int tm = (tl + tr) / 2;
- update (v*2+1, tl, tm, l, min(r,tm), add);
- update (v*2+2, tm+1, tr, max(l,tm+1), r, add);
- }
- }
- int main()
- {
- int N, M;
- scanf("%d%d", &N, &M);
- for(int i = 0; i < 4*N-1; i++)
- t[i] = 0;
- int l, r, val, command_type;
- for(int i = 0; i < M; i++){
- cin >> command_type;
- if (command_type == 1){
- cin >> l >> r >> val;
- update(0, 0, 4*N-1, l, r, val);
- }else if (command_type == 2){
- cin >> l >> r;
- cout << sum(0, 0, 4*N-1, l, r) << endl;
- }else{
- for(int i = 0; i < 4*N-1; i++)
- cout << t[i] << " ";
- cout << endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement