← Home
package main

import (
	"bufio"
	"bytes"
	"io"
	"os"
	"strconv"
)

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	nextInt := func() int64 {
		for idx < len(data) && (data[idx] < '0' || data[idx] > '9') {
			idx++
		}
		var v int64
		for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
			v = v*10 + int64(data[idx]-'0')
			idx++
		}
		return v
	}

	n := int(nextInt())
	capacity := make([]int64, n+1)
	filled := make([]int64, n+1)
	for i := 1; i <= n; i++ {
		capacity[i] = nextInt()
	}

	parent := make([]int, n+2)
	for i := 1; i <= n+1; i++ {
		parent[i] = i
	}

	find := func(x int) int {
		root := x
		for parent[root] != root {
			root = parent[root]
		}
		for parent[x] != x {
			p := parent[x]
			parent[x] = root
			x = p
		}
		return root
	}

	m := int(nextInt())
	var out bytes.Buffer

	for i := 0; i < m; i++ {
		t := int(nextInt())
		if t == 1 {
			p := int(nextInt())
			x := nextInt()
			cur := find(p)
			for cur <= n && x > 0 {
				remain := capacity[cur] - filled[cur]
				if remain > x {
					filled[cur] += x
					x = 0
				} else {
					filled[cur] = capacity[cur]
					x -= remain
					parent[cur] = find(cur + 1)
					cur = parent[cur]
				}
			}
		} else {
			k := int(nextInt())
			out.WriteString(strconv.FormatInt(filled[k], 10))
			out.WriteByte('\n')
		}
	}

	w := bufio.NewWriterSize(os.Stdout, 1<<20)
	w.Write(out.Bytes())
	w.Flush()
}