MRECT1 - Điểm trên cạnh hình chữ nhật - HRASTOVI

Tác giả: hieult

Ngôn ngữ: C++

#include <cstdio>
#include <vector>
#include <cstdlib>
#include <algorithm>
//#include <conio.h>

using namespace std;

vector<pair < int, int> > X,Y;
int n,que,x,y,x1,x2,y1,y2;

inline int Q_fow(vector<pair<int,int> > &P, int x,int y1,int y2){
     return upper_bound(P.begin(),P.end(),make_pair(x,y2))- upper_bound(P.begin(),P.end(),make_pair(x,y1));  
}

inline int Q_rev(vector<pair<int,int> > &P,int x, int y1,int y2){
     return lower_bound(P.begin(),P.end(),make_pair(x,y2))-lower_bound(P.begin(),P.end(),make_pair(x,y1));
}

int main()
{
    scanf("%d",&n);
    for(int i = 0;i<n;i++)
    {
         scanf("%d %d",&x,&y);
         X.push_back(make_pair(x,y));
         Y.push_back(make_pair(y,x));
    }
    sort(X.begin(),X.end());
    sort(Y.begin(),Y.end());
    scanf("%d",&que);
    for(int i = 1;i<=que;i++)
    {
            scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
            printf("%d\n",Q_fow(X,x1,y1,y2)+Q_fow(Y,y2,x1,x2)+Q_rev(X,x2,y1,y2)+Q_rev(Y,y1,x1,x2));
    }
    // getch();
}

Download