@@ -10,6 +10,11 @@ int main() {
1010 int m = rnd (1 , 100 );
1111 KD_BIT<2 > bit (n, m);
1212 vector<vector<ll>> a (n, vector<ll>(m, 0 ));
13+ for (int i = 0 ; i < n; i++)
14+ for (int j = 0 ; j < m; j++) {
15+ a[i][j] = rnd (INT_MIN, INT_MAX);
16+ bit.update (i, j, a[i][j]);
17+ }
1318 for (int events = 0 ; events < 100 ; events++) {
1419 if (events % 2 == 0 ) {
1520 int i = rnd (0 , n - 1 );
@@ -31,6 +36,46 @@ int main() {
3136 }
3237 }
3338 }
39+ for (int num_tests = 0 ; num_tests < 100 ; num_tests++) {
40+ int n = rnd (1 , 100 );
41+ int m = rnd (1 , 100 );
42+ int l = rnd (1 , 100 );
43+ KD_BIT<3 > bit (n, m, l);
44+ vector<vector<vector<ll>>> a (n,
45+ vector<vector<ll>>(m, vector<ll>(l, 0 )));
46+ for (int i = 0 ; i < n; i++)
47+ for (int j = 0 ; j < m; j++)
48+ for (int k = 0 ; k < l; k++) {
49+ a[i][j][k] = rnd (INT_MIN, INT_MAX);
50+ bit.update (i, j, k, a[i][j][k]);
51+ }
52+ for (int events = 0 ; events < 100 ; events++) {
53+ if (events % 2 == 0 ) {
54+ int i = rnd (0 , n - 1 );
55+ int j = rnd (0 , m - 1 );
56+ int k = rnd (0 , l - 1 );
57+ ll upd = rnd (INT_MIN, INT_MAX);
58+ a[i][j][k] += upd;
59+ bit.update (i, j, k, upd);
60+ } else {
61+ int i1 = rnd (0 , n);
62+ int j1 = rnd (0 , m);
63+ int k1 = rnd (0 , l);
64+ int i2 = rnd (0 , n);
65+ int j2 = rnd (0 , m);
66+ int k2 = rnd (0 , l);
67+ if (i1 > i2) swap (i1, i2);
68+ if (j1 > j2) swap (j1, j2);
69+ if (k1 > k2) swap (k1, k2);
70+ ll naive = 0 ;
71+ for (int i = i1; i < i2; i++)
72+ for (int j = j1; j < j2; j++)
73+ for (int k = k1; k < k2; k++)
74+ naive += a[i][j][k];
75+ assert (naive == bit.query (i1, i2, j1, j2, k1, k2));
76+ }
77+ }
78+ }
3479 cout << " Hello World\n " ;
3580 return 0 ;
3681}
0 commit comments