int query(int a, int b, int N) { if (b - a >= 11) return query_seg(root, a, b, 0, N - 1); int d = seq[a], i; for (i = a + 1; i <= b; i++) d = gcd(d, seq[i]); return d; }
int query_seg(node* cur, int bl, int br, int l, int r) { if (br < l || bl > r) return 0; if (bl <= l && br >= r) return cur->val; int m = (l + r) / 2; int h1 = query_seg(cur->left, bl, br, l, m); int h2 = query_seg(cur->right, bl, br, m + 1, r); if (h1 == 0) return h2; if (h2 == 0) return h1; return gcd(h1, h2); }
int main() { int com, a, b, c; while (scanf("%d%d%d",&com,&a,&b) != EOF) { a += 2; b += 2; //防止出现负数 if (com == 0) { //更新 scanf("%d",&c); insert_seg(a, b, c); } else { //查询 printf("%d\n",query_seg(a,b)); } } return 0; }