Problem:
Problem B: GPA JANKEN

Problem

GPAとは「Galaxy Point of Aizu」の略で、0から4までの実数値を取る。

GPAじゃんけんは二人で行うゲームである。各々が「じゃんけん、ぽん（ほい）」の合図で互いにグー、チョキ、パーのどれか好きな手を出した後、GPAが高い人が勝者となり、低い人が敗者となる。同じ場合は引き分けとなる。

N 人のGPAのデータが与えられるので、総当たり戦をした時のそれぞれの勝ち点を出力せよ。

ただし、勝ち点は勝ちの時3、引き分けの時1、負けの時0とする。

総当たり戦とはすべての参加者が自分以外の参加者と丁度一回ずつ対戦する方式である。

Input

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

N
a1
a2
...
aN

一行目にGPAじゃんけんをする人数 N が与えられる。

続く N 行に i 番目の人のGPAのデータ ai が一行に与えられる。

Constraints

入力は以下の条件を満たす。

2 ≤ N ≤ 105

N は整数

0.000 ≤ ai ≤ 4.000 ( 1 ≤ i ≤ N )

ai は実数 ( 1 ≤ i ≤ N )

各GPAは小数点以下3桁まで与えられる

Output

i 行目に i 番目の人の勝ち点を一行に出力せよ。
( 1 ≤ i ≤ N )

Sample Input 1

3
1.000
3.000
3.000

Sample Output 1

0
4
4

Sample Input 2

3
1.000
2.000
3.000

Sample Output 2

0
3
6

Solution in JAVA (judge verdict: Wrong Answer)

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.NoSuchElementException;
public class Main implements Runnable{
	int N;
	int[] a;
    public void solve() {
    	N = nextInt();
    	a = new int[N];
    	for(int i = 0;i < N;i++){
    		a[i] = (int)(nextDouble()*1000);
    	}

    	long[] b = new long[4444];
    	for(int i = 0;i < N;i++){
    		b[a[i]+1]++;
    	}

    	for(int i = 0;i < 4443;i++){
    		b[i+1] += b[i];
    	}

    	for(int i = 0;i < N;i++){
    		int c = a[i]+1;
    		out.println((b[c-1])* 3 + (b[c]-b[c-1]-1));
    	}
    }

    public static void main(String[] args) {
        new Thread(null,new Main(),"",64 * 1024 * 1024).start();
    }

    /* Input */
    private static final InputStream in = System.in;
    private static final PrintWriter out = new PrintWriter(System.out);
    private final byte[] buffer = new byte[2048];
    private int p = 0;
    private int buflen = 0;

    private boolean hasNextByte() {
        if (p < buflen)
            return true;
        p = 0;
        try {
            buflen = in.read(buffer);
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (buflen <= 0)
            return false;
        return true;
    }

    public boolean hasNext() {
        while (hasNextByte() && !isPrint(buffer[p])) {
            p++;
        }
        return hasNextByte();
    }

    private boolean isPrint(int ch) {
        if (ch >= '!' && ch <= '~')
            return true;
        return false;
    }

    private int nextByte() {
        if (!hasNextByte())
            return -1;
        return buffer[p++];
    }

    public String next() {
        if (!hasNext())
            throw new NoSuchElementException();
        StringBuilder sb = new StringBuilder();
        int b = -1;
        while (isPrint((b = nextByte()))) {
            sb.appendCodePoint(b);
        }
        return sb.toString();
    }

    public int nextInt() {
        return Integer.parseInt(next());
    }

    public long nextLong() {
        return Long.parseLong(next());
    }

    public double nextDouble() {
        return Double.parseDouble(next());
    }

    @Override
    public void run() {
        out.flush();
        new Main().solve();
        out.close();

    }
}