Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

完全平等二国間貿易

サイバースペースにあるアイヅ国はワカマツ国と情報貿易を行っています。２つの国はお互いに有用なデータを交換することで経済発展を遂げています。博愛と平等、そして何よりも会津地方の古い言葉である、「ならぬことはならぬものです」を国是とする両国は、定期的に貿易状況の調査を行っています。

調査では、バイト単位でアイヅ国から見たデータ流入量から流出量を引いた値を、１ナノ秒ごとに求めた表が与えられます。その表から、値の総和が０になる最長の区間を見つけます。この区間が長いほど、平等性が保たれていると判断します。

貿易状況が記録された表が与えられたとき、値の総和が０になる最長の区間の長さを求めるプログラムを作成せよ。

Input

入力は以下の形式で与えられる。

N
d1
d2
:
dN

１行目に、表に書かれた値の数 N (1 ≤ N ≤ 200000) が与えられる。続く N 行に、表の i 行目に書かれた値を示す整数 di (-109 ≤ di ≤ 109) が与えられる。

Output

表から得られる、総和が０になる最長の区間の長さを１行に出力する。そのような区間が存在しない場合、「0」を１行に出力する。

Sample Input 1

5
18
102
-155
53
32

Sample Output 1

3

入力例１では、２行目から４行目までの値の総和が０になるので、最長の区間の長さが3になる。

Sample Input 2

4
1
1
-1
-1

Sample Output 2

4

入力例２では、２行目から３行目の総和が０になるが、１行目から４行目までの値の総和も０になるので、最長の区間の長さが4になる。

Solution in C# (judge verdict: Wrong Answer)

using System;

public class hello
{
    public static void Main()
    {
        var n = int.Parse(Console.ReadLine().Trim());
        var a = new int[n + 1];
        var a2 = new int[n + 1];
        for (int i = 0; i < n; i++)
        {
            var t = int.Parse(Console.ReadLine().Trim());
            a[i + 1] = t;
            a2[i + 1] = t + a2[i];
        }
        var maxij = 0;
        for (int i = 0; i <= n; i++)
            for (int j = 2; j <= n; j++)
                if (a[i] == a2[j]) maxij = Math.Max(maxij, j - i);
        if (maxij == 0 | maxij == 1) Console.WriteLine(0);
        else Console.WriteLine(maxij);
    }
}