Task: | Sums |
Sender: | Pohjantahti |
Submission time: | 2018-10-20 14:47:52 +0300 |
Language: | C++ |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.02 s | details |
#2 | ACCEPTED | 0.01 s | details |
#3 | ACCEPTED | 0.02 s | details |
#4 | ACCEPTED | 0.02 s | details |
#5 | ACCEPTED | 0.02 s | details |
#6 | ACCEPTED | 0.27 s | details |
#7 | ACCEPTED | 0.27 s | details |
#8 | ACCEPTED | 0.26 s | details |
#9 | ACCEPTED | 0.26 s | details |
#10 | ACCEPTED | 0.27 s | details |
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 ... |