Cod sursa(job #197600)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 5 iulie 2008 11:42:56
Problema Gropi Scor 50
Compilator cpp Status done
Runda Junior Challenge 2008 Marime 1.03 kb
#include <cstdio>
#define IN "gropi.in"
#define OUT "gropi.out"
#define C_MAX 400000
#define M_MAX 100001
#define FOR(i,a,b) for(int i=a;i<=b;++i)

int timp,N,C,M;
struct dest{int x1,y1,x2,y2;};
dest D[M_MAX];
char a[C_MAX];

void scan()
{
	int x,y;
	freopen(IN, "r",stdin);
	freopen(OUT, "w",stdout);
	scanf("%d%d\n",&C,&N);
	FOR(i,1,N)
	{
		scanf("%d%d\n", &x,&y);
		if(x == 1)
			a[y]=1;
		else
			a[y]=2;
	}	
	scanf("%d\n", &M);
	FOR(i,1,M)
		scanf("%d%d%d%d", &D[i].x1,&D[i].y1,&D[i].x2,&D[i].y2);
}

void solve()
{
	FOR(k,1,M)
	{
		timp=1;
		if( D[k].y2 < D[k].y1 )
		{
			int aux = D[k].y1;
			D[k].y1 = D[k].y2;
			D[k].y2 = aux;
			aux = D[k].x1;
			D[k].x1 = D[k].x2;
			D[k].x2 = aux;
		}
		int poz=D[k].x1;
      	FOR(i,D[k].y1,D[k].y2-1)
			if(a[i+1] == poz)
			{
				if(poz == 1)
					poz = 2;
				else
					poz = 1;
				++timp;
				++timp;
			}
			else
				++timp;
		if(poz != D[k].x2)
			++timp;
		printf("%d\n",timp);
	}	
}

int main()
{
	scan();
	solve();
	return 0;
}