#include <bits/stdc++.h>   using namespace std;   const long long MAXN = 1e5 + 10;   long long tree[MAXN * 4][7][11], s[6][MAXN], a[MAXN];   void Pushup(long long u, long long len) {     long long z, i, j;     for (z = 2; z <= 6; z++)       for (i = 0; i < 2 * (z - 1); i++)         tree[u][z][i] =             tree[u * 2][z][i] + tree[u * 2 + 1][z][(i + len) % (2 * (z - 1))];     return;   }   void Build(long long u, long long l, long long r) {     long long z, i;     if (l == r) {       for (z = 2; z <= 6; z++)         for (i = 0; i < (z - 1) * 2; i++) tree[u][z][i] = a[l] * s[z][i];       return;     }     long long mid = (l + r) >> 1;     Build(u * 2, l, mid);     Build(u * 2 + 1, mid + 1, r);     Pushup(u, mid - l + 1);   }   void Update(long long u, long long l, long long r, long long pos,               long long val) {     long long z, i;     if (l == r) {       for (z = 2; z <= 6; z++)         for (i = 0; i < 2 * (z - 1); i++) tree[u][z][i] = val * s[z][i];       return;     }     long long mid = (l + r) >> 1;     if (pos <= mid)       Update(u * 2, l, mid, pos, val);     else       Update(u * 2 + 1, mid + 1, r, pos, val);     Pushup(u, mid - l + 1);   }   long long Query(long long u, long long L, long long R, long long l, long long r,                   long long z, long long i) {     if (L == l && R == r) return tree[u][z][i];     long long mid = (L + R) >> 1;     if (r <= mid) return Query(u * 2, L, mid, l, r, z, i);     if (l > mid) return Query(u * 2 + 1, mid + 1, R, l, r, z, i);     return Query(u * 2, L, mid, l, mid, z, i) +            Query(u * 2 + 1, mid + 1, R, mid + 1, r, z,                  (i + mid - l + 1) % (2 * (z - 1)));   }   int main() {     long long n, m, z, i, j;     scanf( %lld , &n);     for (i = 1; i <= n; i++) scanf( %lld , &a[i]);     for (z = 2; z <= 6; z++) {       long long mod = 2 * (z - 1);       for (i = 1; i <= 100000; i++) {         if (i % mod == 0)           s[z][i - 1] = 2;         else if (i % mod <= z)           s[z][i - 1] = i % mod;         else           s[z][i - 1] = (z * 2) - (i % mod);       }     }     Build(1, 1, n);     scanf( %lld , &m);     for (i = 1; i <= m; i++) {       long long op;       scanf( %lld , &op);       if (op == 1) {         long long pos, val;         scanf( %lld %lld , &pos, &val);         Update(1, 1, n, pos, val);       } else {         long long l, r, z;         scanf( %lld %lld %lld , &l, &r, &z);         printf( %lld n , Query(1, 1, n, l, r, z, 0));       }     }     return 0;   }   