CSES - E4590 2018 6 - Results
Submission details
Task:Sums
Sender:Pohjantahti
Submission time:2018-10-20 14:47:52 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.02 sdetails
#2ACCEPTED0.01 sdetails
#3ACCEPTED0.02 sdetails
#4ACCEPTED0.02 sdetails
#5ACCEPTED0.02 sdetails
#6ACCEPTED0.27 sdetails
#7ACCEPTED0.27 sdetails
#8ACCEPTED0.26 sdetails
#9ACCEPTED0.26 sdetails
#10ACCEPTED0.27 sdetails

Code

#include <iostream>
 
using namespace std;
typedef long long ll;
 
const int N = 1<<19;
 
int n, q;
ll st[2*N];
ll lzset[2*N];
bool hasset[2*N];
ll lzadd[2*N];
bool hasadd[2*N];
 
void push(int s, int l, int r) {
    if (hasset[s]) st[s] = lzset[s]*(r-l+1);
    if (hasadd[s]) st[s] += lzadd[s]*(r-l+1);
    
    if (s < N) {
        if (hasset[s]) {
            lzset[2*s] = lzset[s];
            lzset[2*s+1] = lzset[s];
            hasset[2*s] = true;
            hasset[2*s+1] = true;
            lzadd[2*s] = 0;
            lzadd[2*s+1] = 0;
            hasadd[2*s] = false;
            hasadd[2*s+1] = false;
        }
        if (hasadd[s]) {
            lzadd[2*s] += lzadd[s];
            lzadd[2*s+1] += lzadd[s];
            hasadd[2*s] = true;
            hasadd[2*s+1] = true;
        }
    }
    lzset[s] = 0;
    hasset[s] = false;
    lzadd[s] = 0;
    hasadd[s] = false;
}
 
ll summa(int ql, int qr, int l = 1, int r = N, int s = 1) {
    push(s, l, r);
    if (ql <= l && r <= qr) return st[s];
    if (l > qr || r < ql) return 0;
    int mid = (l+r)/2;
    return summa(ql, qr, l, mid, 2*s) + summa(ql, qr, mid+1, r, 2*s+1); 
}
 
void aseta(int ql, int qr, ll x, int l = 1, int r = N, int s = 1) {
    push(s, l, r);
    if (ql <= l && r <= qr) {
        lzset[s] = x;
        hasset[s] = true;
        lzadd[s] = 0;
        hasadd[s] = false;
        push(s, l, r);
        return;
    }
    if (l > qr || r < ql) return;
    int mid = (l+r)/2;
    aseta(ql, qr, x, l, mid, 2*s);
    aseta(ql, qr, x, mid+1, r, 2*s+1);
    st[s] = st[2*s] + st[2*s+1];
}
 
void lisaa(int ql, int qr, ll x, int l = 1, int r = N, int s = 1) {
    push(s, l, r);
    if (ql <= l && r <= qr) {
        lzadd[s] += x;
        hasadd[s] = true;
        push(s, l, r);
        return;
    }
    if (l > qr || r < ql) return;
    int mid = (l+r)/2;
    lisaa(ql, qr, x, l, mid, 2*s);
    lisaa(ql, qr, x, mid+1, r, 2*s+1);
    st[s] = st[2*s] + st[2*s+1];
}
 
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        ll cn;
        cin >> cn;
        aseta(i, i, cn);
    }
    
    cin >> q;
    
    for (int i = 0; i < q; ++i) {
        int tp;
        cin >> tp;
        if (tp == 1) {
            int a, b, x;
            cin >> a >> b >> x;
            lisaa(a, b, x);
        }
        if (tp == 2) {
            int a, b, x;
            cin >> a >> b >> x;
            aseta(a, b, x);
        }
        if (tp == 3) {
            int a, b;
            cin >> a >> b;
            cout << summa(a, b) << "\n";
        }
    }
    return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
10
-10 3 -1 4 4 1 6 7 9 3
20
2 7 10 -5
2 5 9 2
...

correct output
-2
32
10
13
12

user output
-2
32
10
13
12

Test 2

Verdict: ACCEPTED

input
10
-10 -4 -7 -2 5 -8 0 -5 -5 5
20
3 8 10
1 5 6 7
...

correct output
-5
12
7
-13
-33
...

user output
-5
12
7
-13
-33
...

Test 3

Verdict: ACCEPTED

input
10
0 -2 7 4 1 4 -5 8 9 -10
20
2 2 8 -5
2 8 9 -2
...

correct output
-17
-10
-12
-5
21

user output
-17
-10
-12
-5
21

Test 4

Verdict: ACCEPTED

input
10
0 6 -6 -9 7 -9 2 6 -4 -8
20
1 8 10 9
2 2 6 -10
...

correct output
6
30
-30
-9

user output
6
30
-30
-9

Test 5

Verdict: ACCEPTED

input
10
-8 6 0 8 1 -8 3 6 10 -6
20
2 5 7 -3
3 2 4
...

correct output
14
18
7
29
-20

user output
14
18
7
29
-20

Test 6

Verdict: ACCEPTED

input
100000
273768 -746242 141310 -177646 ...

correct output
6647300100
16584491568
2201217278
4428835910
-5370398949
...

user output
6647300100
16584491568
2201217278
4428835910
-5370398949
...

Test 7

Verdict: ACCEPTED

input
100000
-371240 -967819 -659618 -83603...

correct output
-8551444
-14584129201
-9051387
1006850011
-1119500762
...

user output
-8551444
-14584129201
-9051387
1006850011
-1119500762
...

Test 8

Verdict: ACCEPTED

input
100000
954118 382497 -92991 199841 98...

correct output
-31591117
3979951718
1018552734
1672204000
230714784
...

user output
-31591117
3979951718
1018552734
1672204000
230714784
...

Test 9

Verdict: ACCEPTED

input
100000
-374041 -712493 -568255 490384...

correct output
9993656711
4138033702
8839287
3596183407
-643074001
...

user output
9993656711
4138033702
8839287
3596183407
-643074001
...

Test 10

Verdict: ACCEPTED

input
100000
257414 -141188 -721927 -67385 ...

correct output
-47022095
-13947364
19483822021
10788657040
-4163257456
...

user output
-47022095
-13947364
19483822021
10788657040
-4163257456
...