-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathBIT.cpp
More file actions
99 lines (85 loc) · 1.63 KB
/
BIT.cpp
File metadata and controls
99 lines (85 loc) · 1.63 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
#include<iostream>
#include<string>
using namespace std;
int tree[100010];
// 关于N,实际上N是跟实际数组长度有关,可以每添加一次就令N++,不能直接让N取极大的定值
int N = 100005;
void update(int index,int n){
for(int i = index;i < N;i += (i&-i)){
tree[i] += n;
}
}
int query_sum(int n){
int ans = 0;
for(int i = n;i > 0;i -= (i&-i)){
ans += tree[i];
}
return ans;
}
int main() {
system("pause");
return 0;
}
/*下面是hdoj 1166 的C++ AC代码 746ms 可以看成树状数组的模板,有树状数组的建立*/
/*
#include<iostream>
#include<string>
#include<queue>
#define MAX_Tot 500005
using namespace std;
int tree[50010];
int NUM = 2;
void update(int index, int n) {
for (int i = index; i <= NUM; i += (i&-i)) {
tree[i] += n;
}
}
int query_sum(int n) {
int ans = 0;
for (int i = n; i > 0; i -= (i&-i)) {
ans += tree[i];
}
return ans;
}
int main() {
int T;
scanf("%d", &T);
for (int I = 1; I <= T; I++) {
memset(tree, 0, sizeof(tree));
cout << "Case " << I << ":" << endl;
int N;
int end = 0;
scanf("%d", &N);
NUM = N;
for (int i = 1; i <= N; i++) {
int num;
scanf("%d", &num);
update(i, num);
}
string com;
int i, j;
while (1) {
cin >> com;
int flag = com[0] - 'A';
switch (flag) {
case 0: {
scanf("%d%d", &i, &j);
update(i, j);
}break;
case 4: end = 1; break;
case 16: {
scanf("%d%d", &i, &j);
cout << query_sum(j) - query_sum(i - 1) << endl;
}break;
case 18: {
scanf("%d%d", &i, &j);
update(i, -j);
}break;
}
if (end == 1) break;
}
}
system("pause");
return 0;
}
*/