#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
#define ld long double
using namespace std;
struct Point
{
int v;
ld x, y, y_t;
Point(ld x = 0, ld y = 0, int v = 0, ld y_t = 0) :
v(v), x(x), y(y), y_t(y_t) {};
bool operator < (const Point &other) const
{
if (x != other.x)
return x < other.x;
return v < other.v;
}
};
const int maxn = 3e5;
int n, bit[maxn + 10];
ll ans = 0;
vector<Point> points;
vector<ld> v;
int get_id(ld x)
{
return lower_bound(v.begin(), v.end(), x) - v.begin() + 1;
}
void update(int x, int v)
{
for (; x <= maxn; x += x&-x)
bit[x] += v;
}
int get(int x)
{
int ans = 0;
for (;x; x &= x - 1)
ans += bit[x];
return ans;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("SEGMENT.INP", "r"))
{
freopen("SEGMENT.INP", "r", stdin);
freopen("SEGMENT.OUT", "w", stdout);
}
cin >> n;
for (int i = 1; i <= n; i++)
{
ld x_a, x_b, y;
cin >> x_a >> x_b >> y;
if (x_a > x_b)
swap(x_a, x_b);
points.push_back(Point(x_a, y, 1));
points.push_back(Point(x_b, y, -1));
v.push_back(y);
}
for (int i = 1; i <= n; i++)
{
ld y_a, y_b, x;
cin >> y_a >> y_b >> x;
if (y_a > y_b)
swap(y_a, y_b);
points.push_back(Point(x, y_a, 3, y_b));
v.push_back(y_a);
v.push_back(y_b);
}
sort(points.begin(), points.end());
sort(v.begin(), v.end());
v.resize(unique(v.begin(), v.end()) - v.begin());
for (Point p : points)
{
// cout << p.x << ' ' << p.y << ' ' << p.y_t << ' ' << p.v, el;
if (p.v == 3)
ans += get(get_id(p.y_t)) - get(get_id(p.y) - 1);
else
update(get_id(p.y), p.v);
// cout << ans, el;
}
cout << ans;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwojZGVmaW5lIGxkIGxvbmcgZG91YmxlCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFBvaW50CnsKICAgIGludCB2OwogICAgbGQgeCwgeSwgeV90OwoKICAgIFBvaW50KGxkIHggPSAwLCBsZCB5ID0gMCwgaW50IHYgPSAwLCBsZCB5X3QgPSAwKSA6CiAgICAgICAgdih2KSwgeCh4KSwgeSh5KSwgeV90KHlfdCkge307CiAgICBib29sIG9wZXJhdG9yIDwgKGNvbnN0IFBvaW50ICZvdGhlcikgY29uc3QKICAgIHsKICAgICAgICBpZiAoeCAhPSBvdGhlci54KQogICAgICAgICAgICByZXR1cm4geCA8IG90aGVyLng7CiAgICAgICAgcmV0dXJuIHYgPCBvdGhlci52OwogICAgfQp9OwoKY29uc3QgaW50IG1heG4gPSAzZTU7CgppbnQgbiwgYml0W21heG4gKyAxMF07CmxsIGFucyA9IDA7CnZlY3RvcjxQb2ludD4gcG9pbnRzOwp2ZWN0b3I8bGQ+IHY7CgppbnQgZ2V0X2lkKGxkIHgpCnsKICAgIHJldHVybiBsb3dlcl9ib3VuZCh2LmJlZ2luKCksIHYuZW5kKCksIHgpIC0gdi5iZWdpbigpICsgMTsKfQp2b2lkIHVwZGF0ZShpbnQgeCwgaW50IHYpCnsKICAgIGZvciAoOyB4IDw9IG1heG47IHggKz0geCYteCkKICAgICAgICBiaXRbeF0gKz0gdjsKfQppbnQgZ2V0KGludCB4KQp7CiAgICBpbnQgYW5zID0gMDsKICAgIGZvciAoO3g7IHggJj0geCAtIDEpCiAgICAgICAgYW5zICs9IGJpdFt4XTsKICAgIHJldHVybiBhbnM7Cn0KCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4oIlNFR01FTlQuSU5QIiwgInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKCJTRUdNRU5ULklOUCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oIlNFR01FTlQuT1VUIiwgInciLCBzdGRvdXQpOwogICAgfQoKICAgIGNpbiA+PiBuOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgewogICAgICAgIGxkIHhfYSwgeF9iLCB5OwogICAgICAgIGNpbiA+PiB4X2EgPj4geF9iID4+IHk7CiAgICAgICAgaWYgKHhfYSA+IHhfYikKICAgICAgICAgICAgc3dhcCh4X2EsIHhfYik7CiAgICAgICAgcG9pbnRzLnB1c2hfYmFjayhQb2ludCh4X2EsIHksIDEpKTsKICAgICAgICBwb2ludHMucHVzaF9iYWNrKFBvaW50KHhfYiwgeSwgLTEpKTsKICAgICAgICB2LnB1c2hfYmFjayh5KTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgIHsKICAgICAgICBsZCB5X2EsIHlfYiwgeDsKICAgICAgICBjaW4gPj4geV9hID4+IHlfYiA+PiB4OwogICAgICAgIGlmICh5X2EgPiB5X2IpCiAgICAgICAgICAgIHN3YXAoeV9hLCB5X2IpOwogICAgICAgIHBvaW50cy5wdXNoX2JhY2soUG9pbnQoeCwgeV9hLCAzLCB5X2IpKTsKICAgICAgICB2LnB1c2hfYmFjayh5X2EpOwogICAgICAgIHYucHVzaF9iYWNrKHlfYik7CiAgICB9CiAgICBzb3J0KHBvaW50cy5iZWdpbigpLCBwb2ludHMuZW5kKCkpOwogICAgc29ydCh2LmJlZ2luKCksIHYuZW5kKCkpOwogICAgdi5yZXNpemUodW5pcXVlKHYuYmVnaW4oKSwgdi5lbmQoKSkgLSB2LmJlZ2luKCkpOwoKICAgIGZvciAoUG9pbnQgcCA6IHBvaW50cykKICAgIHsKLy8gICAgICAgIGNvdXQgPDwgcC54IDw8ICcgJyA8PCBwLnkgPDwgJyAnIDw8IHAueV90IDw8ICcgJyA8PCBwLnYsIGVsOwogICAgICAgIGlmIChwLnYgPT0gMykKICAgICAgICAgICAgYW5zICs9IGdldChnZXRfaWQocC55X3QpKSAtIGdldChnZXRfaWQocC55KSAtIDEpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgdXBkYXRlKGdldF9pZChwLnkpLCBwLnYpOwovLyAgICAgICAgY291dCA8PCBhbnMsIGVsOwogICAgfQogICAgY291dCA8PCBhbnM7Cn0K