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: Accepted)

import java.util.*;
import java.io.*;
import static java.lang.Math.*;

class Main {

    static final double eps = 1.0e-8;
    static final int X = 0;
    static final int Y = 1;
    
    public static void main( String[] args ) {

	final Scanner stdin = new Scanner( System.in );

	while ( stdin.hasNextDouble() ) {
	    final double[][] ps = new double[4][2];
	    for ( int i = 0; i < 4; i++ ){
		ps[i][X] = stdin.nextDouble();
		ps[i][Y] = stdin.nextDouble();
	    }

	    if ( intersect( ps[0][X], ps[1][X], ps[2][X], ps[3][X] ) &&
		 intersect( ps[0][Y], ps[1][Y], ps[2][Y], ps[3][Y] ) ) {
		
		System.out.println( "YES" );
	    } else {
		System.out.println( "NO" );
	    }
	}
    }

    static boolean intersect( double a1, double a2, double b1, double b2 ) {
	return min( a1, a2 ) <= max( b1, b2 ) &&
	    min( b1, b2 ) <= max( a1, a2 );
    }
}