#include using namespace std; template class DynamicSegTree { private: struct node_t; using u64 = uint64_t; using node_ptr = unique_ptr; struct node_t { S val; node_ptr l, r; node_t(S val) : val(val), l(nullptr), r(nullptr) {} }; node_ptr root; u64 size; void set(node_ptr& x, u64 index, S value, u64 l, u64 r) { if (!x) x = make_unique(e()); if (index < l || r <= index) return; if (r - l == 1) { x->val = value; return; } u64 m = l + ((r - l) >> 1); if (index < m) { set(x->l, index, value, l, m); } else { set(x->r, index, value, m, r); } x->val = e(); if (x->l) x->val = op(x->val, x->l->val); if (x->r) x->val = op(x->val, x->r->val); } S get(node_ptr& x, u64 index, u64 l, u64 r) { if (!x) return e(); if (r - l == 1) return x->val; u64 m = l + ((r - l) >> 1); if (index < m) { return get(x->l, index, l, m); } else { return get(x->r, index, m, r); } } S prod(node_ptr& x, u64 l, u64 r, u64 lb, u64 ub) { if (!x || ub <= l || r <= lb) return e(); if (l <= lb && ub <= r) return x->val; u64 mb = lb + ((ub - lb) >> 1); return op(prod(x->l, l, r, lb, mb), prod(x->r, l, r, mb, ub)); } public: DynamicSegTree(u64 n) : root(nullptr), size(n) {} void set(u64 index, S value) { assert (0 <= index && index < size); set(root, index, value, (u64)0, size); } S get(u64 index) { assert (0 <= index && index < size); return get(root, index, (u64)0, size); } S prod(u64 l, u64 r) { return prod(root, l, r, (u64)0, size); } S all_prod() { return root ? root->val : e(); } }; using S=int; S op(auto x,auto y){return x+y;} S e(){return 0;} int main() { int n; cin >> n; DynamicSegTree dst(1e9+1); long long ans=0; for (int i=0;i> q; if (q==0){ cin >> x >> y; dst.set(x,dst.get(x)+y); }else { cin >> l >> r; ans+=dst.prod(l,r+1); } } cout << ans << endl; }