Problem:
長方形の重なり

底辺が x 軸に対して平行な 2 つの長方形があります。長方形 A の左下の座標 (xa1, ya1) と右上の座標 (xa2, ya2)、長方形 B の左下の座標 (xb1, yb1) と右上の座標 (xb2, yb2) を読み込んで、長方形 A と長方形 B が一部でも重なっていれば YES を、まったく重なっていなければ NO を出力するプログラムを作成してください。ただし、長方形 A と長方形 B は同じものではないとします。また、接しているものも重なっているとみなします。

Input

複数のデータセットが与えられます。各データセットの形式は以下のとおりです。

xa1 ya1 xa2 ya2 xb1 yb1 xb2 yb2

入力される値はそれぞれ -2,000 以上 2,000 以下であり、各値は小数点以下最大 5 桁までの数字を含む実数で与えられます。

データセットの数は 50 を超えません。

Output

各データセットに対して、YES または NO を１行に出力して下さい。

Sample Input

0.0 0.0 5.0 5.0 1.0 1.0 4.0 4.0
0.0 0.0 4.0 5.0 1.0 1.0 5.0 5.0
0.0 0.0 4.0 4.0 -3.0 -5.0 2.0 -1.0

Output for the Sample Input

YES
YES
NO

Solution in JAVA (judge verdict: Wrong Answer)

import java.io.*;
import java.util.StringTokenizer;

class Rectangle {
	double x[] = new double[2];
	double y[] = new double[2];

	Rectangle(double x1,double y1,double x2,double y2) { //左下:(x0,y0) 右上:(x1,y1)
		x[0] = x1;
		y[0] = y1;
		x[1] = x2;
		y[1] = y2;
	}

	boolean hasIntersection(Rectangle r) {
		if (this.x[0]<=r.x[0]&&r.x[0]<=this.x[1]) {
			return checkY(r);
		} else if (r.x[0]<=this.x[0]) {
			if (this.x[0]<=r.x[1]&&r.x[1]<=this.x[1]) {
				return checkY(r);
			}
		}
		return false;
	}

	boolean checkY(Rectangle r) {
		if (this.y[0]<=r.y[0]&&r.y[0]<=this.y[1]) return true;
		else if (this.y[0]<=r.y[1]&&r.y[1]<=this.y[1]) return true;
		else if (r.y[0]<=this.y[0]&&this.y[1]<=r.y[1]) return true;
		else return false;
	}
}

class Main {
	public static void main(String args[]) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String buf;

		try {
			while ((buf = br.readLine())!=null) {
				StringTokenizer st = new StringTokenizer(buf);
				double x[] = new double[4];
				double y[] = new double[4];
				for (int i=0;i<4;i++) {
					x[i] = Double.parseDouble(st.nextToken());
					y[i] = Double.parseDouble(st.nextToken());
				}
				Rectangle r[] = new Rectangle[2];
				r[0] = new Rectangle(x[0],y[0],x[1],y[1]);
				r[1] = new Rectangle(x[2],y[2],x[3],y[3]);
				if (r[0].hasIntersection(r[1])) System.out.println("YES");
				else System.out.println("NO");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}