void update(pt & cur, int query_l, int query_r) { if (cur->l == query_l && cur->r == query_r) { cur->delta++; return; } int m = cur->get_m(); if (query_l < m && useful(query_l, min(query_r, m))) { if (cur->left == NULL) cur->left = new node(cur->l, m); update(cur->left, query_l, min(query_r, m)); } if (query_r > m && useful(max(query_l, m), query_r)) { if (cur->right == NULL) cur->right = new node(m, cur->r); update(cur->right, max(query_l, m), query_r); } }