intmain() { int i, m, j, res = 0; vector<int> t; t.push_back(-1); scanf("%d", &m);
for (i = 1; i <= m; i++) scanf("%d", &a[i].a); for (i = 1; i <= m; i++) { scanf("%d", &a[i].b); t.push_back(a[i].b); } for (i = 1; i <= m; i++) scanf("%d", &a[i].c); //将b离散化 sort(t.begin() + 1, t.end()); n = unique(t.begin() + 1, t.end()) - t.begin() - 1; for (i = 1; i <= m; i++) a[i].b = lower_bound(t.begin() + 1, t.begin() + 1 + n, a[i].b) - t.begin();
sort(a + 1, a + 1 + m); for (i = 1; i <= m; i++) { for (j = i; j <= m && a[j].a == a[i].a; j++) { //mx(a[j].b+1):之前处理过,且B值比当前点的B值大的物品所能取得的最大C值 if (mx(a[j].b + 1) > a[j].c) res++; } for (j = i; j <= m && a[j].a == a[i].a; j++) add(a[j].b, a[j].c); i = j - 1; } printf("%d", res); return0; }