#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
pair<int,int> sq[100'000];
struct block
{
int x, min_y, max_y;
int sz()
{
return max_y - min_y + 1;
}
};
int m;
vector<block> blocks;
vector<vector<int>> neighbors;
vector<bool> vis;
ll res;
int dfs(int u)
{
ll sz = blocks[u].sz();
vis[u] = true;
for (int v : neighbors[u])
if (!vis[v])
sz += dfs(v);
res += sz * (n - sz) % 1'000'000'000;
res %= 1'000'000'000;
return sz;
}
void solve()
{
sort(sq, sq + n);
blocks.resize(0);
int min_x = sq[0].first;
int max_x = sq[n - 1].first;
for (int i = 0; i < n; i++)
{
int min_y = sq[i].second;
while (i < n && sq[i].first == sq[i + 1].first && sq[i].second + 1 == sq[i + 1].second)
i++;
blocks.push_back({sq[i].first, min_y, sq[i].second});
}
m = blocks.size();
neighbors.assign(m, {});
//int r = 1;
for (int l = 0; l < m && sq[l].first < max_x; l++)
{
int r = l + 1;
while (r < m && blocks[l].x == blocks[r].x) r++;
for (; r < m && blocks[l].x + 1 == blocks[r].x; r++)
if (!(blocks[r].max_y < blocks[l].min_y || blocks[l].max_y < blocks[r].min_y))
{
neighbors[r].push_back(l);
neighbors[l].push_back(r);
}
}
vis.assign(m, false);
dfs(0);
}
int DistanceSum(int N, int *X, int *Y)
{
n = N;
for (int i = 0; i < N; i++)
sq[i].first = X[i], sq[i].second = Y[i];
solve();
for (int i = 0; i < N; i++)
swap(sq[i].first, sq[i].second);
solve();
return (int) (res % 1'000'000'000);
}
/*
int nn;
int xx[100000], yy[100000];
int main()
{
ifstream cin("example.txt");
//ofstream fout("output.txt");
cin >> nn;
for (int i = 0; i < nn; i++)
cin >> xx[i] >> yy[i];
fout << DistanceSum(nn, xx, yy) << '\n';
return 0;
}
*/
Compilation message
city.cpp: In function 'void solve()':
city.cpp:41:9: warning: unused variable 'min_x' [-Wunused-variable]
41 | int min_x = sq[0].first;
| ^~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
316 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
212 KB |
Output is correct |
7 |
Correct |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
212 KB |
Output is correct |
9 |
Correct |
1 ms |
212 KB |
Output is correct |
10 |
Correct |
1 ms |
212 KB |
Output is correct |
11 |
Correct |
1 ms |
212 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
340 KB |
Output is correct |
3 |
Correct |
1 ms |
340 KB |
Output is correct |
4 |
Correct |
2 ms |
324 KB |
Output is correct |
5 |
Correct |
1 ms |
408 KB |
Output is correct |
6 |
Correct |
1 ms |
340 KB |
Output is correct |
7 |
Correct |
1 ms |
324 KB |
Output is correct |
8 |
Correct |
1 ms |
356 KB |
Output is correct |
9 |
Correct |
1 ms |
464 KB |
Output is correct |
10 |
Correct |
1 ms |
340 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
7 ms |
824 KB |
Output is correct |
2 |
Correct |
9 ms |
852 KB |
Output is correct |
3 |
Correct |
19 ms |
1472 KB |
Output is correct |
4 |
Correct |
18 ms |
1588 KB |
Output is correct |
5 |
Correct |
38 ms |
2712 KB |
Output is correct |
6 |
Correct |
33 ms |
2772 KB |
Output is correct |
7 |
Correct |
32 ms |
3040 KB |
Output is correct |
8 |
Correct |
36 ms |
2612 KB |
Output is correct |
9 |
Correct |
36 ms |
2912 KB |
Output is correct |
10 |
Correct |
45 ms |
6152 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
11 ms |
1332 KB |
Output is correct |
2 |
Correct |
10 ms |
1236 KB |
Output is correct |
3 |
Correct |
31 ms |
3284 KB |
Output is correct |
4 |
Correct |
25 ms |
2708 KB |
Output is correct |
5 |
Correct |
59 ms |
5400 KB |
Output is correct |
6 |
Correct |
41 ms |
3792 KB |
Output is correct |
7 |
Correct |
58 ms |
5540 KB |
Output is correct |
8 |
Correct |
51 ms |
3920 KB |
Output is correct |
9 |
Correct |
43 ms |
3784 KB |
Output is correct |
10 |
Correct |
39 ms |
3440 KB |
Output is correct |