#include<bits/stdc++.h> #define ll long long // Note: // 1. Index from 1 -> n // 2. all values are INT (NOT long long) template <typename T> struct BITSum { int n; T *BIT; BITSum () {} void init (int n_) { n = n_; BIT = new T[n + 1]; fill(BIT, BIT + n + 1, 0); } void clear() { fill(BIT, BIT + n + 1, 0); } // all index from idx to n get added by v void update(int idx, T v) { while (idx <= n) { BIT[idx] += v; idx += (idx & (-idx)); } } // point query T getsum(int idx) { T ret = 0; while (idx > 0) { ret += BIT[idx]; idx -= (idx & (-idx)); } return ret; } };