CSES - Leirikisa 3 - Results
Submission details
Task:Bittilista
Sender:ollpu
Submission time:2016-07-29 14:12:59 +0300
Language:C++
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
Test results
testverdicttimegroup
#10.14 s1details
#20.14 s1details
#30.14 s1details
#40.13 s1details
#50.14 s1details
#60.15 s2details
#70.14 s2details
#80.15 s2details
#90.16 s2details
#100.14 s2details
#110.15 s3details
#120.14 s3details
#130.14 s3details
#140.15 s3details
#150.14 s3details

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:

input
10 54

correct output
0001101010

user output
(empty)

Test 2

Group: 1

Verdict:

input
10 302

correct output
1001011011

user output
(empty)

Test 3

Group: 1

Verdict:

input
10 241

correct output
0111100000

user output
(empty)

Test 4

Group: 1

Verdict:

input
10 382

correct output
1011111011

user output
(empty)

Test 5

Group: 1

Verdict:

input
10 138

correct output
0100010010

user output
(empty)

Test 6

Group: 2

Verdict:

input
20 131002

correct output
00111111111101110010

user output
(empty)

Test 7

Group: 2

Verdict:

input
20 441567

correct output
11010111100110111101

user output
(empty)

Test 8

Group: 2

Verdict:

input
20 109770

correct output
00110101100110010010

user output
(empty)

Test 9

Group: 2

Verdict:

input
20 327308

correct output
10011111110100010111

user output
(empty)

Test 10

Group: 2

Verdict:

input
20 302918

correct output
10010011111010001011

user output
(empty)

Test 11

Group: 3

Verdict:

input
50 216967103451763

correct output
011000101010101001001011100100...

user output
(empty)

Test 12

Group: 3

Verdict:

input
50 236618662270629

correct output
011010111001101000001001101001...

user output
(empty)

Test 13

Group: 3

Verdict:

input
50 426560943304480

correct output
110000011111101000111010110000...

user output
(empty)

Test 14

Group: 3

Verdict:

input
50 294553802415801

correct output
100001011111001010010011011000...

user output
(empty)

Test 15

Group: 3

Verdict:

input
50 502225394100883

correct output
111001000110001010111011000110...

user output
(empty)