Problem:
Range Add Query (RAQ)

Write a program which manipulates a sequence A = {a1, a2, . . . , an} with the following operations:

add(s, t, x): add x to as, as+1, ..., at.

get(i): output the value of ai.

Note that the initial values of ai (i = 1, 2, . . . , n) are 0.

Input

n q
query1
query2
:
queryq

In the first line, n (the number of elements in A) and q (the number of queries) are given. Then, ith query queryi is given in the following format:

0 s t x

or

1 t

The first digit represents the type of the query. '0' denotes add(s, t, x) and '1' denotes get(i).

Output

For each get operation, print the value.

Constraints

1 ≤ n ≤ 100000

1 ≤ q ≤ 100000

1 ≤ s ≤ t ≤ n

1 ≤ i ≤ n

0 ≤ x ≤ 1000

Sample Input 1

3 5
0 1 2 1
0 2 3 2
0 3 3 3
1 2
1 3

Sample Output 1

3
5

Sample Input 2

4 3
1 2
0 1 4 1
1 2

Sample Output 2

0
1

Solution in OCaml (judge verdict: Accepted)

open Printf
open Scanf

let () =
  let n, q = scanf "%d %d " (fun x y -> (x, y)) in
  let st = Array.make (4*n) 0 in
  let add s t x =
    let rec iter k l r =
      if t <= l || r <= s then ()
      else if s <= l && r <= t then
        st.(k) <- st.(k) + x
      else
        let m = (l + r) / 2 in
        iter (2*k) l m;
        iter (2*k+1) m r in
    iter 1 0 n in
  let get i =
    let rec iter k l r s =
      if i = l && i+1 = r then s + st.(k)
      else
        let m = (l + r) / 2 in
        if i < m then iter (2*k) l m (s + st.(k))
        else iter (2*k+1) m r (s + st.(k))
    in
    iter 1 0 n 0 in
  let rec loop c =
    if c = 0 then ()
    else
      begin
        begin
          let com = scanf "%d " (fun a -> a) in
          if com = 0 then
            let s, t, x = scanf "%d %d %d " (fun a b c -> (a-1, b, c)) in
            add s t x
          else
            let i = scanf "%d " (fun a -> a-1) in
            get i |> printf "%d\n"
        end;
        loop (c-1)
      end
  in loop q