# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1118961 | gdragon | 별들과 삼각형 (IZhO11_triangle) | C++17 | 188 ms | 13452 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define TASK "long"
#define fi first
#define se second
#define ll long long
#define pb push_back
#define ALL(x) (x).begin(), (x).end()
#define GETBIT(mask, i) ((mask) >> (i) & 1)
#define MASK(i) ((1LL) << (i))
#define SZ(x) ((int)(x).size())
#define mp make_pair
#define CNTBIT(mask) __builtin_popcount(mask)
template<class X, class Y> bool maximize(X &x, Y y){ if (x < y) {x = y; return true;} return false;};
template<class X, class Y> bool minimize(X &x, Y y){ if (x > y) {x = y; return true;} return false;};
typedef pair<int, int> ii;
const int N = 3e5 + 5;
const int inf = 1e9 + 7;
const long long INF = (long long)1e18 + 7;
const int mod = 1e9 + 7;
int n;
ii a[N];
int suf[N], pre[N];
void read() {
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i].fi >> a[i].se;
}
void compress() {
vector<int> valX, valY;
for(int i = 1; i <= n; i++) {
valX.push_back(a[i].fi);
valY.push_back(a[i].se);
}
sort(ALL(valX)); valX.erase(unique(ALL(valX)), valX.end());
sort(ALL(valY)); valY.erase(unique(ALL(valY)), valY.end());
for(int i = 1; i <= n; i++) {
a[i].fi = lower_bound(ALL(valX), a[i].fi) - valX.begin() + 1;
a[i].se = lower_bound(ALL(valY), a[i].se) - valY.begin() + 1;
}
}
void solve() {
compress();
sort(a + 1, a + n + 1);
// for(int i = 1; i <= n; i++) cout << a[i].fi << ' ' << a[i].se << endl;
for(int i = 1; i <= n; i++) ++suf[a[i].se];
long long ans = 0;
for(int i = 1; i <= n; i++) {
int j = i;
while(j <= n && a[j].fi == a[i].fi) {
--suf[a[j].se];
++j;
}
--j;
long long lef = 0, rig = 0;
for(int k = i; k <= j; k++) {
ans += 1LL * pre[a[k].se] * (k - i);
ans += lef;
ans += 1LL * suf[a[k].se] * (k - i);
ans += rig;
lef += pre[a[k].se];
rig += suf[a[k].se];
++pre[a[k].se];
}
i = j;
}
cout << ans;
}
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen(TASK".inp", "r")) {
freopen(TASK".inp", "r", stdin);
freopen(TASK".out", "w", stdout);
}
int test = 1;
// cin >> test;
while(test--) {
read();
solve();
}
return 0;
}
// rmq - rmq2d
// hash
// fw - fw2d
// segtree
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |