#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>using namespace std;typedef __int64 LL;const int maxn = 100010;LL sum[maxn<<2];void build(int l, int r, int rt){ if (l == r) { scanf("%I64d", &sum[rt]); return ; } int m = (l + r) >> 1; build(l, m, rt << 1); build(m + 1, r, rt << 1 | 1); sum[rt] = sum[rt<<1] + sum[rt<<1|1];}void update(int L, int R, int l, int r, int rt){ if (sum[rt] <= r - l + 1) return ; if (l == r) { sum[rt] = (LL)sqrt((double)sum[rt]); return ; } int m = (l + r) >> 1; if (L <= m) update(L, R, l, m, rt << 1); if (R > m) update(L, R, m + 1, r, rt << 1 | 1); sum[rt] = sum[rt<<1] + sum[rt<<1|1];}LL query(int L, int R, int l, int r, int rt){ if (L <= l && R >= r) { if (sum[rt] <= r - l + 1 || l == r) return sum[rt]; } int m = (l + r) >> 1; LL ans = 0; if (L <= m) ans += query(L, R, l, m, rt << 1); if (R > m) ans += query(L, R, m + 1, r, rt << 1 | 1); return ans;}int main(){ int n, m, t, x, y; int cas = 0; while (scanf("%d", &n) != EOF) { cas++; printf("Case #%d:\n", cas); build(1, n, 1); scanf("%d", &m); while (m--) { scanf("%d %d %d", &t, &x, &y); if (x > y) swap(x, y); if (t == 0) update(x, y, 1, n, 1); else printf("%I64d\n", query(x, y, 1, n, 1)); } printf("\n"); } return 0;}