-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcode.txt
More file actions
102 lines (97 loc) · 2.08 KB
/
code.txt
File metadata and controls
102 lines (97 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
int sz = 100;
intArray a (sz);
intArray t(sz * 4);
function void func(int n, int cur, string s) {
if (cur == n) {
output(s);
output("\n");
return;
}
if (cur <= 1) {
func(n, cur + 1, s + "0");
func(n, cur + 1, s + "1");
}
else {
func(n, cur + 1, s + "0");
if (s[cur - 1] != "1" || s[cur - 2] != "1") {
func(n, cur + 1, s + "1");
}
}
}
function void build(int l, int r, int v) {
if (l == r - 1) {
t[v] = a[l];
return;
}
int m = (l + r) / 2;
build(l, m, v * 2 + 1);
build(m, r, v * 2 + 2);
t[v] = t[v * 2 + 1] + t[v * 2 + 2];
return;
}
function int get(int v, int l, int r, int askl, int askr) {
if (l >= askr || r <= askl) {
return 0;
}
if (l >= askl && r <= askr) {
return t[v];
}
int m = (l + r) / 2;
return (get(2 * v + 1, l, m, askl, askr) + get(2 * v + 2, m, r, askl, askr));
}
function void change(int v, int l, int r, int pos, int val) {
if (l == r - 1) {
t[v] = val;
return;
}
int m = (l + r) / 2;
if (pos < m) {
change(2 * v + 1, l, m, pos, val);
} else {
change(2 * v + 2, m, r, pos, val);
}
t[v] = t[2 * v + 1] + t[2 * v + 2];
return;
}
main () {
int w;
input(w);
func(w, 0, "");
int n;
input(n);
int i = 0;
for (i = 0; i < n; ++i) {
int x;
input(x);
a[i] = x;
}
build(0, n, 0);
int q;
input(q);
for (i = 0; i < q; ++i) {
int t;
input(t);
if (t == 1) {
int l, r;
input(l);
input(r);
l--;
output(get(0, 0, n, l, r));
output("\n");
}
elseif (t == 2) {
int pos, val;
input(pos);
input(val);
change(0, 0, n, pos - 1, val);
}
else {
int j;
for (j = 0;j < n; j++) {
output(get(0, 0, n, j, j + 1));
output(" ");
}
output("\n");
}
}
}