Cod sursa(job #563549)

Utilizator SpiderManSimoiu Robert SpiderMan Data 25 martie 2011 13:28:33
Problema Gropi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
# include <algorithm>
# include <fstream>
using namespace std ;

# define x first
# define y second
# define mp make_pair
# define ub upper_bound

const char *FIN = "gropi.in", *FOU = "gropi.out" ;
const int MAX = 100005 ;

pair < int, int > V[MAX], X, Y ;
int dp[MAX] ;
int N, C, T ;

int main ( void ) {
    ifstream f ( FIN ) ;
    ofstream g ( FOU ) ;

    f >> C >> N ;
    for ( int i = 0; i < N; ++i ) {
        f >> V[i].y >> V[i].x ;
    }
    V[N++] = mp ( C + 5, 0 ), std :: sort ( V, V + N ) ;
    dp[0] = V[0].y != V[1].y ;
    for ( int i = 1; i + 1 < N; ++i ) {
        dp[i] = ( V[i].y != V[i + 1].y ) + dp[i - 1] ;
    }

    for ( f >> T ; T ; --T ) {
        f >> X.y >> X.x >> Y.y >> Y.x ;
        if ( Y < X ) swap ( X, Y ) ;

        int A = ub ( V, V + N, mp ( X.x, 0 ) ) - V ;
        if ( Y.x <= V[A].x ) {
            g << Y.x - X.x + 1 + ( X.y != Y.y ) << "\n" ;
        } else {
            int B = ub ( V, V + N, mp ( Y.x, 0 ) ) - V - 1 ;
            g << Y.x - X.x + 1 + dp[B - 1] - dp[A - 1] + (X.y == V[A].y) + (Y.y == V[B].y) << "\n" ;
        }
    }
}