#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
const int N = 1<<19;
vector<int> vec1[N], vec2[N];
map<int,int> mp1, mp2, mp11, mp22;
int x[N], y[N], cur1, cur2;
int main(){
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
long long n, ans = 0;
cin>>n;
for (int i=1;i<=n;i++){
cin>>x[i]>>y[i];
mp1[x[i]];
mp2[y[i]];
}
for (auto [i, x] : mp1)
mp11[i] = ++cur1;
for (auto [i, x] : mp2)
mp22[i] = ++cur2;
for (int i=1;i<=n;i++){
x[i] = mp11[x[i]];
y[i] = mp22[y[i]];
vec1[x[i]].push_back(y[i]);
vec2[y[i]].push_back(x[i]);
}
for (int i=1;i<=n;i++){
sort(begin(vec1[i]), end(vec1[i]));
sort(begin(vec2[i]), end(vec2[i]));
}
for (int i=1;i<=n;i++){
int u = vec1[x[i]].end() - upper_bound(begin(vec1[x[i]]), end(vec1[x[i]]), y[i]);
int U = upper_bound(begin(vec1[x[i]]), end(vec1[x[i]]), y[i] - 1) - vec1[x[i]].begin();
int v = vec2[y[i]].end() - upper_bound(begin(vec2[y[i]]), end(vec2[y[i]]), x[i]);
int V = upper_bound(begin(vec2[y[i]]), end(vec2[y[i]]), x[i] - 1) - vec2[y[i]].begin();
ans += 1LL * (U + u) * (v + V);
}
cout<<ans<<'\n';
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |