Problem:
A：沢山の種類の林檎 (Many Kinds of Apples)

Problem Statement

Apple Farmer Mon has two kinds of tasks: "harvest apples" and "ship apples".

There are N different species of apples, and N distinguishable boxes. Apples are labeled by the species, and boxes are also labeled, from 1 to N. The i-th species of apples are stored in the i-th box.

For each i, the i-th box can store at most c_i apples, and it is initially empty (no apple exists).

Mon receives Q instructions from his boss Kukui, and Mon completely follows in order. Each instruction is either of two types below.

"harvest apples": put d x-th apples into the x-th box.

"ship apples": take d x-th apples out from the x-th box.

However, not all instructions are possible to carry out. Now we call an instruction which meets either of following conditions "impossible instruction":

When Mon harvest apples, the amount of apples exceeds the capacity of that box.

When Mon tries to ship apples, there are not enough apples to ship.

Your task is to detect the instruction which is impossible to carry out.

Input

Input is given in the following format.

N
c_1 c_2 $\cdots$ c_N
Q
t_1 x_1 d_1
t_2 x_2 d_2
$\vdots$
t_Q x_Q d_Q

In line 1, you are given the integer N, which indicates the number of species of apples.

In line 2, given c_i (1 \leq i \leq N) separated by whitespaces. c_i indicates the capacity of the i-th box.

In line 3, given Q, which indicates the number of instructions.

Instructions are given successive Q lines. t_i x_i d_i means what kind of instruction, which apple Mon handles in this instruction, how many apples Mon handles, respectively. If t_i is equal to 1, it means Mon does the task of "harvest apples", else if t_i is equal to 2, it means Mon does the task of "ship apples".

Constraints

All input values are integers, and satisfy following constraints.

1 \leq N \leq 1,000

1 \leq c_i \leq 100,000 (1 \leq i \leq N)

1 \leq Q \leq 100,000

t_i \in \{1, 2\} (1 \leq i \leq Q)

1 \leq x_i \leq N (1 \leq i \leq Q)

1 \leq d_i \leq 100,000 (1 \leq i \leq Q)

Output

If there is "impossible instruction", output the index of the apples which have something to do with the first "impossible instruction".

Otherwise, output 0.

Sample Input 1

2
3 3
4
1 1 2
1 2 3
2 1 3
2 2 3

Sample Output 1

1

In this case, there are not enough apples to ship in the first box.

Sample Input 2

2
3 3
4
1 1 3
2 1 2
1 2 3
1 1 3

Sample Output 2

1

In this case, the amount of apples exceeds the capacity of the first box.

Sample Input 3

3
3 4 5
4
1 1 3
1 2 3
1 3 5
2 2 2

Sample Output 3

0

Sample Input 4

6
28 56 99 3 125 37
10
1 1 10
1 1 14
1 3 90
1 5 10
2 3 38
2 1 5
1 3 92
1 6 18
2 5 9
2 1 4

Sample Output 4

3

Solution in Rust (judge verdict: Accepted)

extern crate core;

use std::io::{self, Read};

#[macro_use]
mod parser {
    macro_rules! input {
    ($s:expr=>$($t:tt)*) => {
        let mut lines=$s.split("\n");
        $(
            line_parse!(lines,$t);
        )*
    };
    }

    macro_rules! line_parse {
    ($lines:expr,($($name:ident:$t:tt)*)) => {
        let mut line=$lines.next().unwrap().split_whitespace();
        $(value_def!(line,$name,$t);)*
    };

    //複数行
    ($lines:expr,{$n:expr;$name:ident:$t:tt}) => {
        values_def!($lines,$n,$name,$t);
    };
    }

    macro_rules! value_def {
    ($line:expr,$name:ident,$t:tt) => {
        let $name=value!($line,$t);
    };
    }

    macro_rules! values_def {
    ($lines:expr,$n:expr,$name:ident,$t:tt) => {
        let $name={
        let mut vec=Vec::new();
        for i in 0..$n{
            let mut next=$lines.next().unwrap().split_whitespace();
            vec.push(value!(next,$t));
        }
        vec
        };
    };
    }

    macro_rules! value {
    //配列
    ($line:expr,[$t:tt]) => {
        $line.map(|x|{
        let mut iter=::std::iter::once(x);
        value!(iter,$t)
        }).collect::<Vec<_>>()
    };
    //タプル
    ($line:expr,($($t:tt),*)) => {
        ($(value!($line,$t),)*)
    };
    //文字列
    ($line:expr,#) => {
        $line.next().unwrap()
    };
    //単一値
    ($line:expr,$t:ty) => {
        $line.next().unwrap().parse::<$t>().unwrap()
    };
    }
}

fn main() {
    let mut input = String::new();
    io::stdin().read_to_string(&mut input).unwrap();
    let output = run(input.trim().to_string());
    println!("{}", output);
}

fn run(input: String) -> String {
    input!(input=>
        (n:usize)
        (c:[i64])
        (q:usize)
        {q;list:(i64,usize,i64)});
    let mut apb = Vec::new();
    for _ in 0..n {
        apb.push(0);
    }

    for (t, x, d) in list {
        if t == 1 {
            //収穫
            apb[x - 1] += d;
            if apb[x - 1] > c[x - 1] {
                return x.to_string();
            }
        } else {
            //出荷
            apb[x - 1] -= d;
            if apb[x - 1] < 0 {
                return x.to_string();
            }
        }
    }

    0.to_string()
}

macro_rules! tests {
    ($($name:ident: $input:expr=>$output:expr,)*) => {
        mod tests {
            $(
                #[test]
                fn $name() {
                    assert_eq!(super::run($input.to_string()), $output.to_string());
                }
            )*
        }
    }
}

tests! {
    test1: "2
3 3
4
1 1 2
1 2 3
2 1 3
2 2 3" => "1",
    test2: "2
3 3
4
1 1 3
2 1 2
1 2 3
1 1 3" => "1",
    test3: "3
3 4 5
4
1 1 3
1 2 3
1 3 5
2 2 2" => "0",
    test4: "6
28 56 99 3 125 37
10
1 1 10
1 1 14
1 3 90
1 5 10
2 3 38
2 1 5
1 3 92
1 6 18
2 5 9
2 1 4" => "3",
}