Language: C++

#include<bits/stdc++.h>
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;

class Node{
public:
  int location;
  int p,l,r;
  Node(){}
};

class Point{
public:
  int id,x,y;
  Point(){}
  Point(int id,int x,int y): id(id),x(x),y(y){}
  bool operator < (const Point &p){return id<p.id;}
};

static const int MAX =100000;
static const int NIL = -1;

int n;
Point P[MAX];
Node T[MAX];

int np;

bool lessX(const Point &p1,const Point &p2){return p1.x<p2.x;}
bool lessY(const Point &p1,const Point &p2){return p1.y<p2.y;}

int makeKDTree(int l,int r, int d){
  if(!(l<r))return NIL;
  int mid=(l+r)>>1;
  int t=np++;
  nth_element(p+l,p+mid,p+r,(d&1 ? lessY : lessX));
  T[t].location=mid;
  T[t].l=makeKDTree(l,mid,d+1);
  T[t].r=makeKDTree(mid+1,r,d+1);
  return t;
}

void find(int v,int sx,int tx,int sy,int ty,int d,vector<Point> &ans){
  if( sx <= P[T[v].location].x && P[T[v].location].x <= tx && sy <= P[T[v].location].y && P[T[v].location].y <= ty )return T[v].location;
  int res=-1;
  if(d%2==0){
    if(T[v].l!=NIL&&sx<=x)res=find(T[v].l,sx,tx,sy,ty,d+1,ans);
    if(res!=-1)return res;
    if(T[v].r!=NIL&&x<=tx)res=find(T[v].r,sx,tx,sy,ty,d+1,ans);
  }
  else{
    if(T[v].l!=NIL&&sy<=y)res=find(T[v].l,sx,tx,sy,ty,d+1,ans);
    if(res!=-1)return res;
    if(T[v].r!=NIL&&y<=ty)res=find(T[v].r,sx,tx,sy,ty,d+1,ans);
  }
  return res;
}

bool exist(int v,int sx,int tx,int sy,int ty,int d,vector<Point> &ans){
  if( sx <= P[T[v].location].x && P[T[v].location].x <= tx && sy <= P[T[v].location].y && P[T[v].location].y <= ty )return 1;
  if(d%2==0){
    if(T[v].l!=NIL&&sx<=x)if(find(T[v].l,sx,tx,sy,ty,d+1,ans))return 1;
    if(T[v].r!=NIL&&x<=tx)if(find(T[v].r,sx,tx,sy,ty,d+1,ans))return 1;
  }
  else{
    if(T[v].l!=NIL&&sy<=y)if(find(T[v].l,sx,tx,sy,ty,d+1,ans))return 1;
    if(T[v].r!=NIL&&y<=ty)if(find(T[v].r,sx,tx,sy,ty,d+1,ans))return 1;
  }
  return 0;
}

int main(){
  int x,y;
  cin>>n;
  rep(i,n){
    scanf("%d %d",&x,&y);
    P[i]=Point(i,x,y);
    T[i].l=T[i].r=T[i].p=NIL;
  }
  np=0;
  int root=makeKDTree(0,n,0);
  int q;
  cin>>q;
  int sx,sy,tx,ty;
  vector<Point>ans;
  rep(i,q){
    scanf("%d %d %d %d",&sx,&tx,&sy,&ty);
    ans.clear();
    find(root,sx,tx,sy,ty,0,ans);
    sort(ans.begin(),ans.end());
    rep(j,ans.size())printf("%d\n",ans[j].id);
    cout<<endl;
  }return 0;
}


Compiler output:
a.cc: In function 'int makeKDTree(int, int, int)':
a.cc:36:15: error: 'p' was not declared in this scope
   36 |   nth_element(p+l,p+mid,p+r,(d&1 ? lessY : lessX));
      |               ^
a.cc: In function 'void find(int, int, int, int, int, int, std::vector<Point>&)':
a.cc:44:129: error: return-statement with a value, in function returning 'void' [-fpermissive]
   44 |   if( sx <= P[T[v].location].x && P[T[v].location].x <= tx && sy <= P[T[v].location].y && P[T[v].location].y <= ty )return T[v].location;
      |                                                                                                                            ~~~~~^~~~~~~~
a.cc:47:25: error: 'x' was not declared in this scope
   47 |     if(T[v].l!=NIL&&sx<=x)res=find(T[v].l,sx,tx,sy,ty,d+1,ans);
      |                         ^
a.cc:47:35: error: void value not ignored as it ought to be
   47 |     if(T[v].l!=NIL&&sx<=x)res=find(T[v].l,sx,tx,sy,ty,d+1,ans);
      |                               ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:48:23: error: return-statement with a value, in function returning 'void' [-fpermissive]
   48 |     if(res!=-1)return res;
      |                       ^~~
a.cc:49:21: error: 'x' was not declared in this scope
   49 |     if(T[v].r!=NIL&&x<=tx)res=find(T[v].r,sx,tx,sy,ty,d+1,ans);
      |                     ^
a.cc:49:35: error: void value not ignored as it ought to be
   49 |     if(T[v].r!=NIL&&x<=tx)res=find(T[v].r,sx,tx,sy,ty,d+1,ans);
      |                               ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:52:25: error: 'y' was not declared in this scope
   52 |     if(T[v].l!=NIL&&sy<=y)res=find(T[v].l,sx,tx,sy,ty,d+1,ans);
      |                         ^
a.cc:52:35: error: void value not ignored as it ought to be
   52 |     if(T[v].l!=NIL&&sy<=y)res=find(T[v].l,sx,tx,sy,ty,d+1,ans);
      |                               ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:53:23: error: return-statement with a value, in function returning 'void' [-fpermissive]
   53 |     if(res!=-1)return res;
      |                       ^~~
a.cc:54:21: error: 'y' was not declared in this scope
   54 |     if(T[v].r!=NIL&&y<=ty)res=find(T[v].r,sx,tx,sy,ty,d+1,ans);
      |                     ^
a.cc:54:35: error: void value not ignored as it ought to be
   54 |     if(T[v].r!=NIL&&y<=ty)res=find(T[v].r,sx,tx,sy,ty,d+1,ans);
      |                               ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:56:10: error: return-statement with a value, in function returning 'void' [-fpermissive]
   56 |   return res;
      |          ^~~
a.cc: In function 'bool exist(int, int, int, int, int, int, std::vector<Point>&)':
a.cc:62:25: error: 'x' was not declared in this scope
   62 |     if(T[v].l!=NIL&&sx<=x)if(find(T[v].l,sx,tx,sy,ty,d+1,ans))return 1;
      |                         ^
a.cc:62:34: error: could not convert 'find(T[v].Node::l, sx, tx, sy, ty, (d + 1), (* & ans))' from 'void' to 'bool'
   62 |     if(T[v].l!=NIL&&sx<=x)if(find(T[v].l,sx,tx,sy,ty,d+1,ans))return 1;
      |                              ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                  |
      |                                  void
a.cc:63:21: error: 'x' was not declared in this scope
   63 |     if(T[v].r!=NIL&&x<=tx)if(find(T[v].r,sx,tx,sy,ty,d+1,ans))return 1;
      |                     ^
a.cc:63:34: error: could not convert 'find(T[v].Node::r, sx, tx, sy, ty, (d + 1), (* & ans))' from 'void' to 'bool'
   63 |     if(T[v].r!=NIL&&x<=tx)if(find(T[v].r,sx,tx,sy,ty,d+1,ans))return 1;
      |                              ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                  |
      |                                  void
a.cc:66:25: error: 'y' was not declared in this scope
   66 |     if(T[v].l!=NIL&&sy<=y)if(find(T[v].l,sx,tx,sy,ty,d+1,ans))return 1;
      |                         ^
a.cc:66:34: error: could not convert 'find(T[v].Node::l, sx, tx, sy, ty, (d + 1), (* & ans))' from 'void' to 'bool'
   66 |     if(T[v].l!=NIL&&sy<=y)if(find(T[v].l,sx,tx,sy,ty,d+1,ans))return 1;
      |                              ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                  |
      |                                  void
a.cc:67:21: error: 'y' was not declared in this scope
   67 |     if(T[v].r!=NIL&&y<=ty)if(find(T[v].r,sx,tx,sy,ty,d+1,ans))return 1;
      |                     ^
a.cc:67:34: error: could not convert 'find(T[v].Node::r, sx, tx, sy, ty, (d + 1), (* & ans))' from 'void' to 'bool'
   67 |     if(T[v].r!=NIL&&y<=ty)if(find(T[v].r,sx,tx,sy,ty,d+1,ans))return 1;
      |                              ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                  |
      |                                  void