/**************************************************************** 
 * Description: 
 * Author: Alex Li
 * Date: 2024-06-20 22:04:39
 * LastEditTime: 2024-08-20 14:30:57
****************************************************************/
#include <iostream>
using namespace std;

const int maxn = 10001;
int n, a[maxn];

struct node {
    int l, r, sum;  // l, r表示区间左右端点，sum表示区间[l, r]的元素和
} tree[maxn * 4];

void build(int k, int l, int r) { // 创建线段树，k是存储下标，l, r表示区间左右
    tree[k].l = l;
    tree[k].r = r;
    if (l == r) {  // 叶子结点
        tree[k].sum = a[l];
        return;
    }
    int mid = (l + r) / 2;
    build(2 * k, l, mid); // k结点的左孩子编号是2*k
    build(2 * k + 1, mid + 1, r); // k结点右孩子编号2*k+1
    tree[k].sum = tree[2 * k].sum + tree[2 * k + 1].sum;  // 结点和是左结点和右结点的和
}

void update(int k, int i, int v) { // 点更新，将a[i]修改更新为v
    if (tree[k].l == tree[k].r && tree[k].l == i) {
        tree[k].sum = v;
        return;
    }
    int mid = (tree[k].l + tree[k].r) / 2;
    if (i <= mid) update(2 * k, i, v);
    else update(2 * k + 1, i, v);
    tree[k].sum = tree[2 * k].sum + tree[2 * k + 1].sum; // 回归时更新和
}

int query(int k, int l, int r) {
    if (tree[k].l == l && tree[k].r == r) return tree[k].sum;  // 区间相等

    int mid = (tree[k].l + tree[k].r) / 2;
    if (r <= mid)
        return query(2 * k, l, r);   // 左子树查询
    else if (l > mid)
        return query(2 * k + 1, l, r);  // 右子树查询
    else
        return query(2 * k, l, mid) + query(2 * k + 1, mid + 1, r); // 左右子树分别查询
}

// 广度优先，输出tree
void printBFS(int k) {
    for (int k = 1; k <= 4 * n; k++) {
        // 输出结点编号、结点左边界、右边界、区间的元素和
        if (tree[k].sum) cout << k << "\t" << tree[k].l << "\t" << tree[k].r << "\t" << tree[k].sum << "\t" << endl;
    }
}

int main() {
    cin >> n;
    // 输入 n个无序数字
    for (int i = 1; i <= n; i++) cin >> a[i];

    build(1, 1, n);  // 创建线段树
    cout << query(1, 3, 5) << endl;  // 查询第3-5位置之间的元素的和
    update(1, 4, 10);            // 更新第4个元素为10
    cout << query(1, 3, 5) << endl;  // 再次查询第3-5位之间的元素和
    printBFS(1);             // 广度优先输出 tree

    return 0;
}
