Pagini recente » Cod sursa (job #1472476) | Cod sursa (job #2397768) | Cod sursa (job #263645) | Cod sursa (job #1884397) | Cod sursa (job #197983)
Cod sursa(job #197983)
#include <cstdio>
#include <algorithm>
#include <vector>
#define IN "gropi.in"
#define OUT "gropi.out"
#define N_MAX 100001
#define f first
#define s second
#define mp make_pair
#define pb push_back
#define FOR(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
vector <pair <int,int> > v(N_MAX);
int N,M,C;
int x1,x2,y1,y2;
void scan()
{
freopen(IN, "r",stdin);
freopen(OUT, "w",stdout);
scanf("%d%d\n", &C,&N);
FOR(i,1,N)
scanf("%d%d", &v[i].s,&v[i].f);
v.resize(N);
sort(v.begin()+1, v.end()+1 );
scanf("%d", &M);
}
inline int caut_bin()
{
int m,a=1,b=N;
while(a < b)
{
m = (a+b)/2;
if( v[m].f < y1)
a = m+1;
else
b = m;
}
m = (a+b)/2;
if(v[m].f < y1)
++m;
if(v[m].f > y2)
--m;
if(v[m].f < y2 && v[m].f > y1)
return m;
return N+1;
}
void solve()
{
scanf("%d%d%d%d", &x1,&y1,&x2,&y2);
if( y1 > y2 )
swap(y1,y2),swap(x1,x2);
int rez = 0;
int poz = caut_bin();
int line = x1;
FOR(i,poz,N)
{
if(v[i].s == line)
++line,++rez;
if(line == 3)
line = 1;
if(v[i+1].f > y2)
break;
}
if(line != x2)
++rez;
rez += y2-y1+1;
printf("%d\n",rez);
}
int main()
{
scan();
FOR(ti,1,M)
solve();
return 0;
}