Cod sursa(job #563544)

Utilizator cont_de_testeCont Teste cont_de_teste Data 25 martie 2011 13:24:50
Problema Gropi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
# include <algorithm>
# include <cstdio>

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

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

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

int main ( void ) {
    freopen ( FIN, "r", stdin ) ;
    freopen ( FOU, "w", stdout ) ;

    scanf ( "%d %d", &C, &N ) ;
    for ( int i = 0; i < N; ++i ) {
        scanf ( "%d %d", &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 ( scanf ( "%d", &T ) ; T ; --T ) {
        scanf ( "%d %d %d %d", &X.y, &X.x, &Y.y, &Y.x ) ;
        if ( Y < X ) std :: swap ( X, Y ) ;

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