Pagini recente » Cod sursa (job #102175) | Cod sursa (job #823970) | Cod sursa (job #1174071) | Cod sursa (job #424958) | Cod sursa (job #1954749)
#include<fstream>
#include<algorithm>
#define f first
#define s second
#define DIM 100005
using namespace std;
int c, n, m, i, st, dr, mid, x, y, sol;
int sum[DIM];
pair<int, int> v[DIM], p1, p2;
ifstream fin("gropi.in");
ofstream fout("gropi.out");
int main(){
fin>> c >> n;
for(i = 1; i <= n; i++){
fin>> v[i].s >> v[i].f;
}
sort(v + 1, v + n + 1);
for(i = 2; i <= n; i++){
sum[i] = sum[i - 1];
if(v[i].s != v[i - 1].s){
sum[i]++;
}
}
fin>> m;
for(; m; m--){
fin>> p1.s >> p1.f >> p2.s >> p2.f;
st = 1;
dr = n;
while(st <= dr){
mid = (st + dr) / 2;
if(v[mid].f >= min(p1.f, p2.f)){
dr = mid - 1;
}
else{
st = mid + x;
}
}
x = st;
st = 1;
dr = n;
while(st <= dr){
mid = (st + dr) / 2;
if(v[mid].f <= max(p1.f, p2.f)){
st = mid + 1;
}
else{
dr = mid - 1;
}
}
y = dr;
sol = max(p1.f, p2.f) - min(p1.f, p2.f) + 1;
if(x <= y){
sol += sum[y] - sum[x] + 1;
if( (p1.f < p2.f && p1.s != v[x].s) || (p1.f > p2.f && p1.s != v[y].s) ){
sol--;
}
if( (p2.f > p1.f && p2.s == v[y].s) || (p2.f < p1.f && p2.s == v[x].s) ){
sol++;
}
}
fout<< sol <<"\n";
}
return 0;
}