parent
745f7e0535
commit
0147f549e1
@ -0,0 +1,77 @@
|
||||
package class32;
|
||||
|
||||
public class Code01_IndexTree {
|
||||
|
||||
public static class IndexTree {
|
||||
|
||||
private int[] tree;
|
||||
private int N;
|
||||
|
||||
public IndexTree(int size) {
|
||||
N = size;
|
||||
tree = new int[N + 1];
|
||||
}
|
||||
|
||||
public int sum(int index) {
|
||||
int ret = 0;
|
||||
while (index > 0) {
|
||||
ret += tree[index];
|
||||
index -= index & -index;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public void add(int index, int d) {
|
||||
while (index <= N) {
|
||||
tree[index] += d;
|
||||
index += index & -index;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class Right {
|
||||
private int[] nums;
|
||||
private int N;
|
||||
|
||||
public Right(int size) {
|
||||
N = size + 1;
|
||||
nums = new int[N + 1];
|
||||
}
|
||||
|
||||
public int sum(int index) {
|
||||
int ret = 0;
|
||||
for (int i = 1; i <= index; i++) {
|
||||
ret += nums[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public void add(int index, int d) {
|
||||
nums[index] += d;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
int N = 100;
|
||||
int V = 100;
|
||||
int testTime = 2000000;
|
||||
IndexTree tree = new IndexTree(N);
|
||||
Right test = new Right(N);
|
||||
System.out.println("test begin");
|
||||
for (int i = 0; i < testTime; i++) {
|
||||
int index = (int) (Math.random() * N) + 1;
|
||||
if (Math.random() <= 0.5) {
|
||||
int add = (int) (Math.random() * V);
|
||||
tree.add(index, add);
|
||||
test.add(index, add);
|
||||
} else {
|
||||
if (tree.sum(index) != test.sum(index)) {
|
||||
System.out.println("Oops!");
|
||||
}
|
||||
}
|
||||
}
|
||||
System.out.println("test finish");
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue