inline int build(int l, int r)
{
if (l > r) return 0;
int mid = (l + r) >> 1;
double a1 = 0, b1 = 0, a2 = 0, b2 = 0;
for (int i = l; i <= r; ++i) a1 += t[a[i]].x, b1 += t[a[i]].y;
a1 /= (r - l + 1); b1 /= (r - l + 1);
for (int i = l; i <= r; ++i)
{
a2 += (a1 - t[a[i]].x) * (a1 - t[a[i]].x);
b2 += (b1 - t[a[i]].y) * (b1 - t[a[i]].y);
}
if (a2 > b2) nth_element(a + l, a + mid, a + r + 1, cmpx), t[a[mid]].op = 1;
else nth_element(a + l, a + mid, a + r + 1, cmpy), t[a[mid]].op = 2;
t[a[mid]].ls = build(l, mid - 1); t[a[mid]].rs = build(mid + 1, r);
pushup(a[mid]); return a[mid];
}