#include<bits/stdc++.h>
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define ld long double
#define st first
#define nd second
#define pb push_back
#define INF INT_MAX
using namespace std;
const int N = 2e5 + 10;
const int M = 250;
int a[N], fw[N], fw2[M][M][M];
pii c[N], e[N];
pair<int, pii> f[N];
pair<pii, pii> g[N];
void update1(int i, int val) {
for (; i < N; i += i&-i) {
fw[i] += val;
}
}
int query1(int i) {
int ret = 0;
for (; i > 0; i -= i&-i) {
ret += fw[i];
}
return ret;
}
void update2(int ii, int jj, int kk, int val) {
for (int i = ii; i < M; i += i&-i) {
for (int j = jj; j < M; j += j&-j) {
for (int k = kk; k < M; k += k&-k) {
fw2[i][j][k] += val;
}
}
}
}
int query2(int ii, int jj, int kk) {
int ret = 0;
for (int i = ii; i > 0; i -= i&-i) {
for (int j = jj; j > 0; j -= j&-j) {
for (int k = kk; k > 0; k -=k&-k) {
ret += fw2[i][j][k];
}
}
}
return ret;
}
void solve() {
int b, n, d, m; cin >> b >> n >> d >> m;
ll ans = 0;
if (b == 1) {
for (int i = 0; i < n; ++i) cin >> a[i];
sort(a, a+n);
int l = 0;
for (int i = 1; i < n; ++i) {
while (a[i] - a[l] > d) l++;
ans += (i-l);
}
}
else if (b == 2) {
for (int i = 0; i < n; ++i) cin >> c[i].st >> c[i].nd;
for (int i = 0; i < n; ++i) {
e[i].st = c[i].st - c[i].nd;
e[i].nd = c[i].st + c[i].nd + 1;
}
sort(e, e+n);
int l = 0;
update1(e[0].nd, 1);
for (int i = 1; i < n; ++i) {
while (e[i].st - e[l].st > d) {
update1(e[l].nd, -1);
l++;
}
ans += (query1(e[i].nd + d) - query1(max(0, e[i].nd - d - 1)));
update1(e[i].nd, 1);
}
}
else if (b == 3) {
for (int i = 0; i < n; ++i) {
cin >> f[i].st >> f[i].nd.st >> f[i].nd.nd;
}
for (int i = 0; i < n; ++i) {
g[i].st.st = f[i].st - f[i].nd.st - f[i].nd.nd;
g[i].st.nd = f[i].st + f[i].nd.st + f[i].nd.nd+1;
g[i].nd.st = f[i].st + f[i].nd.st - f[i].nd.nd+76;
g[i].nd.nd = f[i].st - f[i].nd.st + f[i].nd.nd+76;
}
sort(g, g+n);
int l = 0;
update2(g[0].st.nd, g[0].nd.st, g[0].nd.nd, 1);
for (int i = 1; i < n; ++i) {
while (g[i].st.st - g[l].st.st > d) {
update2(g[l].st.nd, g[l].nd.st, g[l].nd.nd, -1);
l++;
}
ans += query2(g[i].st.nd + d, g[i].nd.st + d, g[i].nd.nd + d);
ans -= query2(g[i].st.nd + d, g[i].nd.st + d, g[i].nd.nd - d);
ans -= query2(g[i].st.nd + d, g[i].nd.st - d, g[i].nd.nd + d);
ans -= query2(g[i].st.nd - d, g[i].nd.st + d, g[i].nd.nd + d);
ans += query2(g[i].st.nd + d, g[i].nd.st - d, g[i].nd.nd - d);
ans += query2(g[i].st.nd - d, g[i].nd.st + d, g[i].nd.nd - d);
ans += query2(g[i].st.nd - d, g[i].nd.st - d, g[i].nd.nd + d);
ans -= query2(g[i].st.nd - d, g[i].nd.st - d, g[i].nd.nd - d);
update2(g[i].st.nd, g[i].nd.st, g[i].nd.nd, 1);
}
}
cout << ans << '\n';
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(NULL);
int t = 1;
// cin >> t;
while (t--) {
solve();
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
340 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
13 ms |
1084 KB |
Output is correct |
2 |
Correct |
11 ms |
1112 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
18 ms |
1528 KB |
Output is correct |
2 |
Correct |
18 ms |
1576 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
17 ms |
1460 KB |
Output is correct |
2 |
Correct |
17 ms |
1492 KB |
Output is correct |
3 |
Correct |
16 ms |
1532 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
852 KB |
Output is correct |
2 |
Correct |
1 ms |
844 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
24 ms |
2400 KB |
Output is correct |
2 |
Correct |
24 ms |
2472 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
29 ms |
2688 KB |
Output is correct |
2 |
Correct |
27 ms |
2692 KB |
Output is correct |
3 |
Correct |
27 ms |
2588 KB |
Output is correct |
4 |
Correct |
28 ms |
2632 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
29 ms |
3532 KB |
Output is correct |
2 |
Correct |
34 ms |
3552 KB |
Output is correct |
3 |
Correct |
33 ms |
3464 KB |
Output is correct |
4 |
Correct |
31 ms |
3516 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
10 ms |
11988 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
81 ms |
4428 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
165 ms |
20288 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
189 ms |
28364 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |