← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

const MAXN = 200005

var (
	n       int
	a       [MAXN]int64
	water   [MAXN]int64
	parent  [MAXN]int
)

func find(x int) int {
	if x > n {
		return x
	}
	if parent[x] == x {
		return x
	}
	parent[x] = find(parent[x])
	return parent[x]
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	fmt.Fscan(reader, &n)
	for i := 1; i <= n; i++ {
		fmt.Fscan(reader, &a[i])
		parent[i] = i
	}
	parent[n+1] = n + 1

	addWater := func(pos int, amount int64) {
		p := find(pos)
		for p <= n && amount > 0 {
			space := a[p] - water[p]
			if space <= amount {
				amount -= space
				water[p] = a[p]
				// vessel p is full, union with p+1
				parent[p] = p + 1
				p = find(p + 1)
			} else {
				water[p] += amount
				amount = 0
			}
		}
	}

	var m int
	fmt.Fscan(reader, &m)

	for i := 0; i < m; i++ {
		var t int
		fmt.Fscan(reader, &t)
		if t == 1 {
			var p int
			var x int64
			fmt.Fscan(reader, &p, &x)
			addWater(p, x)
		} else {
			var k int
			fmt.Fscan(reader, &k)
			fmt.Fprintln(writer, water[k])
		}
	}
}
```