#include <bits/stdc++.h>
#define N_TESTS 10
#define LSOne(x) (x & (-x))
using namespace std;
vector<int> ft, v;
int rsq(int x) {
int ans = 0;
for(; x; x -= LSOne(x)) ans += ft[x];
return ans;
}
int rsq(int a, int b) {
return rsq(b) - rsq(a-1);
}
void update(int x, int inc) {
for(; x<(signed)ft.size(); x+=LSOne(x)) ft[x]+=inc;
}
int main() {
srand (time(NULL));
for(int test=1; test<=N_TESTS; test++) {
printf("Test %d",test);
int n = (rand() % 100) + 1;
ft.resize(n+1);
v.resize(n+1);
fill(ft.begin(), ft.end(), 0);
for(int i=1; i<=n; i++) v[i] = rand()%100, update(i, v[i]);
for(int i=1; i<=n; i++) {
for(int j=i; j<=n; j++) {
int ans = 0;
for(int k=i; k<=j; k++) ans += v[k];
assert(ans == rsq(i,j));
}
}
printf(" - PASS\n");
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgTl9URVNUUyAxMAojZGVmaW5lIExTT25lKHgpICh4ICYgKC14KSkKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PiBmdCwgdjsKCmludCByc3EoaW50IHgpIHsKCWludCBhbnMgPSAwOwoJZm9yKDsgeDsgeCAtPSBMU09uZSh4KSkgYW5zICs9IGZ0W3hdOwoJcmV0dXJuIGFuczsKfQoKaW50IHJzcShpbnQgYSwgaW50IGIpIHsKCXJldHVybiByc3EoYikgLSByc3EoYS0xKTsKfQoKdm9pZCB1cGRhdGUoaW50IHgsIGludCBpbmMpIHsKCWZvcig7IHg8KHNpZ25lZClmdC5zaXplKCk7IHgrPUxTT25lKHgpKSBmdFt4XSs9aW5jOwp9CgppbnQgbWFpbigpIHsKCXNyYW5kICh0aW1lKE5VTEwpKTsKCWZvcihpbnQgdGVzdD0xOyB0ZXN0PD1OX1RFU1RTOyB0ZXN0KyspIHsKICAgICAgICBwcmludGYoIlRlc3QgJWQiLHRlc3QpOwoJCWludCBuID0gKHJhbmQoKSAlIDEwMCkgKyAxOwoJCWZ0LnJlc2l6ZShuKzEpOwoJCXYucmVzaXplKG4rMSk7CgkJZmlsbChmdC5iZWdpbigpLCBmdC5lbmQoKSwgMCk7CgkJZm9yKGludCBpPTE7IGk8PW47IGkrKykgdltpXSA9IHJhbmQoKSUxMDAsIHVwZGF0ZShpLCB2W2ldKTsKCQlmb3IoaW50IGk9MTsgaTw9bjsgaSsrKSB7CgkJCWZvcihpbnQgaj1pOyBqPD1uOyBqKyspIHsKCQkJCWludCBhbnMgPSAwOwoJCQkJZm9yKGludCBrPWk7IGs8PWo7IGsrKykgYW5zICs9IHZba107CgkJCQlhc3NlcnQoYW5zID09IHJzcShpLGopKTsKCQkJfQoJCX0KICAgICAgICBwcmludGYoIiAtIFBBU1NcbiIpOwoJfQp9Cg==