Task: | Bittilista |
Sender: | ollpu |
Submission time: | 2016-07-29 14:12:59 +0300 |
Language: | C++ |
Status: | READY |
Result: | 0 |
group | verdict | score |
---|---|---|
#1 | RUNTIME ERROR | 0 |
#2 | RUNTIME ERROR | 0 |
#3 | RUNTIME ERROR | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | RUNTIME ERROR | 0.14 s | 1 | details |
#2 | RUNTIME ERROR | 0.14 s | 1 | details |
#3 | RUNTIME ERROR | 0.14 s | 1 | details |
#4 | RUNTIME ERROR | 0.13 s | 1 | details |
#5 | RUNTIME ERROR | 0.14 s | 1 | details |
#6 | RUNTIME ERROR | 0.15 s | 2 | details |
#7 | RUNTIME ERROR | 0.14 s | 2 | details |
#8 | RUNTIME ERROR | 0.15 s | 2 | details |
#9 | RUNTIME ERROR | 0.16 s | 2 | details |
#10 | RUNTIME ERROR | 0.14 s | 2 | details |
#11 | RUNTIME ERROR | 0.15 s | 3 | details |
#12 | RUNTIME ERROR | 0.14 s | 3 | details |
#13 | RUNTIME ERROR | 0.14 s | 3 | details |
#14 | RUNTIME ERROR | 0.15 s | 3 | details |
#15 | RUNTIME ERROR | 0.14 s | 3 | details |
Code
#include <iostream> using namespace std; struct node { node* left; node* right; int pr, size; unsigned long val, diff, sum; bool flip; node(unsigned long v) { left = nullptr; right = nullptr; size = 1; pr = rand(); val = v; diff = 0; flip = 0; sum = 0; } }; int size(node* s) { if (s == nullptr) return 0; return s->size; } unsigned long sum(node* s) { if (s == nullptr) return 0; return s->sum; } void lazy_pull(node* s) { if (s == nullptr) return; s->size = size(s->left) + size(s->right) + 1; s->sum = s->val + sum(s->left) + sum(s->right); } void lazy_push(node* s) { if (s == nullptr) return; if (s->flip) { swap(s->left, s->right); if (s->left != nullptr) s->left->flip = !s->left->flip; if (s->right != nullptr) s->right->flip = !s->right->flip; s->flip = false; } if (s->left != nullptr) s->left->diff += s->diff; if (s->right != nullptr) s->right->diff += s->diff; s->val += s->diff; s->diff = 0; } void join(node*& s, node* left, node* right) { lazy_push(left); lazy_push(right); if (left == nullptr) s = right; else if (right == nullptr) s = left; else { if (left->pr > right->pr) { join(left->right, left->right, right); s = left; } else { join(right->left, left, right->left); s = right; } } lazy_pull(s); } void split(node* s, node*& left, node*& right, int k) { if (s == nullptr) { left = nullptr; right = nullptr; return; } lazy_push(s); if (size(s->left) >= k) { split(s->left, left, s->left, k); right = s; } else { split(s->right, s->right, right, k - size(s->left) - 1); left = s; } lazy_pull(s); } void getindex(node* s, node*& result, int i) { lazy_push(s); if (size(s->left) == i) { result = s; } else if (size(s->left) > i) { getindex(s->left, result, i); } else { getindex(s->right, result, i-size(s->left)-1); } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, q; cin >> n >> q; node *tree = nullptr; for (int i = 0; i < n; ++i) { join(tree, tree, new node(0)); } for (int qi = 0; qi < q; ++qi) { char c; int a, b; cin >> c >> a >> b; node *left, *middle, *right; split(tree, left, middle, a-1); split(middle, middle, right, b-a+1); if (c == 'S') { cout << sum(middle) << '\n'; } else if (c == 'R') { middle->flip = !middle->flip; } else { unsigned long d; cin >> d; middle->diff += d; } join(tree, left, middle); join(tree, tree, right); } }
Test details
Test 1
Group: 1
Verdict: RUNTIME ERROR
input |
---|
10 54 |
correct output |
---|
0001101010 |
user output |
---|
(empty) |
Test 2
Group: 1
Verdict: RUNTIME ERROR
input |
---|
10 302 |
correct output |
---|
1001011011 |
user output |
---|
(empty) |
Test 3
Group: 1
Verdict: RUNTIME ERROR
input |
---|
10 241 |
correct output |
---|
0111100000 |
user output |
---|
(empty) |
Test 4
Group: 1
Verdict: RUNTIME ERROR
input |
---|
10 382 |
correct output |
---|
1011111011 |
user output |
---|
(empty) |
Test 5
Group: 1
Verdict: RUNTIME ERROR
input |
---|
10 138 |
correct output |
---|
0100010010 |
user output |
---|
(empty) |
Test 6
Group: 2
Verdict: RUNTIME ERROR
input |
---|
20 131002 |
correct output |
---|
00111111111101110010 |
user output |
---|
(empty) |
Test 7
Group: 2
Verdict: RUNTIME ERROR
input |
---|
20 441567 |
correct output |
---|
11010111100110111101 |
user output |
---|
(empty) |
Test 8
Group: 2
Verdict: RUNTIME ERROR
input |
---|
20 109770 |
correct output |
---|
00110101100110010010 |
user output |
---|
(empty) |
Test 9
Group: 2
Verdict: RUNTIME ERROR
input |
---|
20 327308 |
correct output |
---|
10011111110100010111 |
user output |
---|
(empty) |
Test 10
Group: 2
Verdict: RUNTIME ERROR
input |
---|
20 302918 |
correct output |
---|
10010011111010001011 |
user output |
---|
(empty) |
Test 11
Group: 3
Verdict: RUNTIME ERROR
input |
---|
50 216967103451763 |
correct output |
---|
011000101010101001001011100100... |
user output |
---|
(empty) |
Test 12
Group: 3
Verdict: RUNTIME ERROR
input |
---|
50 236618662270629 |
correct output |
---|
011010111001101000001001101001... |
user output |
---|
(empty) |
Test 13
Group: 3
Verdict: RUNTIME ERROR
input |
---|
50 426560943304480 |
correct output |
---|
110000011111101000111010110000... |
user output |
---|
(empty) |
Test 14
Group: 3
Verdict: RUNTIME ERROR
input |
---|
50 294553802415801 |
correct output |
---|
100001011111001010010011011000... |
user output |
---|
(empty) |
Test 15
Group: 3
Verdict: RUNTIME ERROR
input |
---|
50 502225394100883 |
correct output |
---|
111001000110001010111011000110... |
user output |
---|
(empty) |