Cod sursa(job #197681)

Utilizator ProstuStefan-Alexandru Filip Prostu Data 5 iulie 2008 13:51:32
Problema Gropi Scor 50
Compilator cpp Status done
Runda Junior Challenge 2008 Marime 0.96 kb
#include <fstream>

using namespace std;

typedef pair <int, int> PII;
#define x first
#define y second
#define MP make_pair

const int NMAX = 1 << 17;

PII A[NMAX];
int S[NMAX];

int main(void) {
	ifstream fin("gropi.in");
	ofstream fout("gropi.out");
	int N, C, M;
	int x1, x2, y1, y2;
	int p, p1, p2, i, R;

	fin >> C >> N;

	for (i = 0; i < N; ++i)
		fin >> A[i].y >> A[i].x;
	
	sort(A, A + N);

	p = A[0].y;
	for (i = 1; i < N; ++i) {
		S[i] = S[i-1] + A[i].x - A[i-1].x + (p != A[i].y);
		p = A[i].y;
	}

	fin >> M;
	for (i = 0; i < M; ++i) {
		fin >> x1 >> y1 >> x2 >> y2;
		if (y1 > y2) swap(y1, y2), swap(x1, x2);

		p1 = upper_bound(A, A + N, MP(y1, 0)) - A;
		p2 = upper_bound(A, A + N, MP(y2, 0)) - A - 1;

		if (p1 == N || p2 == -1 || p1 == p2) {
			R = y2 - y1 + (x1 != x2);
		} else {
			R = A[p1].x - y1 + (A[p1].y == x1);
			R += S[p2] - S[p1];
			R += y2 - A[p2].x + (x2 == A[p2].y);
		}

		fout << R + 1 << '\n';
	}

	fin.close();
	fout.close();

	return 0;
}