Problem p02347 (C++) — buggy submission, verdict: Runtime Error

#include <algorithm>
#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;
const int num = 500000, NIL = -1;
vector<int> ans;
class Point {
public:
  int id, x, y;
  Point() {}
  Point(int id, int x, int y) : id(id), x(x), y(y) {}
  bool operator<(Point p) { return id < p.id; }
};
Point P[num];
class Node {
public:
  int l, r, p, location;
};
Node t[num];
inline bool sortx(Point p1, Point p2) { return p1.x < p2.x; }
inline bool sorty(Point p1, Point p2) { return p1.y < p2.y; }
int np = 0;
inline int maket(int l, int r, int de) {
  if (l == r)
    return NIL;
  int T = np++;
  int mid = (l + r) / 2;
  if (de % 2 == 0)
    sort(P + l, P + r, sortx);
  else
    sort(P + l, P + r, sorty);
  t[T].location = mid;
  t[T].l = maket(l, mid, de + 1);
  t[T].r = maket(mid + 1, r, de + 1);
  return T;
}
inline void search(int i, int sx, int tx, int sy, int ty, int de,
                   vector<int> &v) {
  if (sx <= P[t[i].location].x && tx >= P[t[i].location].x &&
      sy <= P[t[i].location].y && ty >= P[t[i].location].y)
    v.push_back(P[t[i].location].id);
  if (de % 2 == 0) {
    if (t[i].l != NIL && P[t[i].location].x >= sx)
      search(t[i].l, sx, tx, sy, ty, de + 1, v);
    if (t[i].r != NIL && P[t[i].location].x <= tx)
      search(t[i].r, sx, tx, sy, ty, de + 1, v);
  } else {
    if (t[i].l != NIL && P[t[i].location].y >= sy)
      search(t[i].l, sx, tx, sy, ty, de + 1, v);
    if (t[i].r != NIL && P[t[i].location].y <= ty)
      search(t[i].r, sx, tx, sy, ty, de + 1, v);
  }
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    P[i] = Point(i, x, y);
    t[i].l = t[i].r = t[i].p = NIL;
  }
  int q;
  cin >> q;
  int root = maket(0, n, 0);
  for (int i = 0; i < q; i++) {
    int sx, sy, tx, ty;
    scanf("%d%d%d%d", &sx, &tx, &sy, &ty);
    search(root, sx, tx, sy, ty, 0, ans);
    sort(ans.begin(), ans.end());
    for (int j = 0; j < ans.size(); j++)
      printf("%d\\n", ans[j]);
    cout << endl;
    ans.clear();
  }

  return 0;
}

Error: -11

Fixed submission:

#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <algorithm>
#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;
const int num = 500000, NIL = -1;
vector<int> ans;
class Point {
public:
  int id, x, y;
  Point() {}
  Point(int id, int x, int y) : id(id), x(x), y(y) {}
};
Point P[num];
class Node {
public:
  int l, r, p, location;
};
Node t[num];
inline bool sortx(Point p1, Point p2) { return p1.x < p2.x; }
inline bool sorty(Point p1, Point p2) { return p1.y < p2.y; }
int np = -1;
inline int maket(int l, int r, int de) {
  if (l == r)
    return NIL;
  np++;
  int mid = (l + r) / 2;
  if (de % 2 == 0)
    sort(P + l, P + r, sortx);
  else
    sort(P + l, P + r, sorty);
  t[np].location = mid;
  t[np].l = maket(l, mid, de + 1);
  t[np].r = maket(mid + 1, r, de + 1);
  return np;
}
inline void search(int i, int sx, int tx, int sy, int ty, int de,
                   vector<int> v) {
  if (sx <= P[t[i].location].x && tx >= P[t[i].location].x &&
      sy <= P[t[i].location].y && ty >= P[t[i].location].y)
    v.push_back(P[t[i].location].id);
  if (de % 2 == 0) {
    if (t[i].l != NIL && P[t[i].location].x >= sx)
      search(t[i].l, sx, tx, sy, ty, de + 1, v);
    if (t[i].r != NIL && P[t[i].location].x <= tx)
      search(t[i].r, sx, tx, sy, ty, de + 1, v);
  } else {
    if (t[i].l != NIL && P[t[i].location].y >= sy)
      search(t[i].l, sx, tx, sy, ty, de + 1, v);
    if (t[i].r != NIL && P[t[i].location].y <= ty)
      search(t[i].r, sx, tx, sy, ty, de + 1, v);
  }
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    int x, y;
    scanf("%d%d", x, y);
    P[i] = Point(i, x, y);
    t[i].l = t[i].r = t[i].p = NIL;
  }
  int q;
  cin >> q;
  int root = maket(0, n, 0);
  for (int i = 0; i < q; i++) {
    int sx, sy, tx, ty;
    scanf("%d%d%d%d", sx, tx, sy, ty);
    search(root, sx, tx, sy, ty, 0, ans);
  }
  for (int i = 0; i < ans.size(); i++) {
    printf("%d", ans[i]);
  }
  return 0;
}