void add(int row, int col, int val) { ++row, ++col; for (int i = row; i <= matrix_.size(); i += lower_bit(i)) { for (int j = col; j <= matrix_[0].size(); j += lower_bit(j)) { bit_[i][j] += val; } } }
int sumRegion_bit(int row, int col) { ++row, ++col; int sum = 0; for (int i = row; i > 0; i -= lower_bit(i)) { for (int j = col; j > 0; j -= lower_bit(j)) { sum += bit_[i][j]; } } return sum; }
void add(int i, int val){ i++; while(i<bit.size()){ bit[i]+=val; i+=lower_bit(i); } }
int query(const vector<int>& bit, int i) { int sum = 0; for (; i > 0; i -= lower_bit(i)) { sum += bit[i]; } return sum; }
int sumRegion_bit(int i) { ++i; int sum = 0; for (; i > 0; i -= lower_bit(i)) { sum += bit_[i]; } return sum; }
int query(int i){ i++; int sum=0; while(i>0){ sum+=bit[i]; i-=lower_bit(i); } return sum; }
rank_t * select_subms(subm_t * subms, int subms_len, rank_t ** ranks_ret) { rank_t * ranks = calloc(subms_len, sizeof(rank_t)); int i = 0; for (; i < subms_len; i++) { ranks[i].subm = &subms[i]; } sort_ranks_in_y(ranks, subms_len); subm_t * min_y = ranks[0].subm; rankp_t * rankps = calloc(subms_len, sizeof(rankp_t)); i = 0; for (; i < subms_len; i++) { rankps[i].i = i; rankps[i].rank = &ranks[i]; } //print_ranks(rankps, subms_len); sort_ranks_in_x(rankps, subms_len); //print_ranks(rankps, subms_len); i = 0; for (; i < subms_len; i++) { int rank_i = rankps[i].i; printf("i %d\n", i); rank_t * rank = rankps[i].rank; rank_t * prev = rank - 1; while (rank_i < subms_len) { if (rank->subm == min_y) { ranks[rank_i].first = rank; ranks[rank_i].rank = 1; } else if (prev->rank + 1 > ranks[rank_i].rank) { ranks[rank_i].first = rank; ranks[rank_i].prev = prev->first; ranks[rank_i].rank = prev->rank + 1; } rank_i += lower_bit(rank_i + 1); int t = 0; for (; t < subms_len; t++) { printf("%d ", ranks[t].rank); } puts(""); } } free(rankps); rank_t * rank_ret = NULL; int max_rank = 0; i = 0; for (; i < subms_len; i++) { int rank = ranks[i].rank; if (rank > max_rank) { max_rank = rank; rank_ret = &ranks[i]; } } * ranks_ret = ranks; return rank_ret; }
void add(vector<int>& bit, int i, int val) { for (; i < bit.size(); i += lower_bit(i)) { bit[i] += val; } }
void add(int i, int val) { ++i; for (; i <= nums_.size(); i += lower_bit(i)) { bit_[i] += val; } }
int main(){ printf("0x%X\n", lower_bit(0x78ABCDEF, 8)); return 0; }