| 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) |
