#include<bits/stdc++.h>
#define IOS ios_base::sync_with_stdio(false);cin.tie();cout.tie();
#define all(x) x.begin(), x.end()
#define int long long
#define pii pair<int, int>
#define pq priority_queue
#define eb emplace_back
#define lb lower_bound
#define ub upper_bound
#define pb push_back
#define pp pop_back
#define F first
#define S second
using namespace std;
int B, N, D, M;
struct B1 {
void solve(){
vector<int> v(N);
for (auto &i: v) cin >> i;
sort(all(v));
int p = 0, ans = 0;
for (int i = 0; i < N; i++) {
while (p < N && v[i] - v[p] > D) p++;
ans += i - p;
}
cout << ans << '\n';
}
} b1;
struct B2 {
int bit[150010];
void update(int x, int k){
for (int i = x; i <= 2 * M; i += i & -i) bit[i] += k;
}
int query(int x) {
int res = 0;
for (int i = x; i >= 1; i-= i & -i) res += bit[i];
return res;
}
void solve(){
vector<pii> v(N);
for (int i = 0; i < N; i++) {
cin >> v[i].F >> v[i].S;
v[i] = {v[i].F + v[i].S, v[i].F - v[i].S + M};
}
sort(all(v));
int p = 0, ans = 0;
for (int i = 0; i < N; i++) {
while (p < N && v[i].F - v[p].F > D) update(v[p++].S, -1);
int l = max(1LL, v[i].S - D), r = min(2 * M, v[i].S + D);
ans += query(r) - query(l-1);
update(v[i].S, 1);
}
cout << ans << '\n';
}
} b2;
struct B3 {
vector<pii> v[160];
int cnt[160][160];
void solve() {
for (int i = 0; i < N; i++) {
int x, y, z; cin >> x >> y >> z;
v[x].pb({y + z, y - z + M});
}
int ans = 0;
for (int i = 1; i <= M; i++) {
for (int a = 1; a <= 2*M; a++)
for (int b = 1; b <= 2*M; b++)
cnt[a][b]=0;
for (auto [x, y]: v[i]) cnt[x][y]++;
for (int a = 1; a <= 2*M; a++)
for (int b = 1; b <= 2*M; b++)
cnt[a][b] += cnt[a-1][b] + cnt[a][b-1] - cnt[a-1][b-1];
for (int j = i; j <= M; j++) {
int d = D - (j - i);
if (d < 0) continue ;
int add = 0;
for (auto [x, y]: v[j]) {
int u = min(2*M, x + d), v = min(2*M, y + d);
x = max(1LL, x - d); y = max(1LL, y - d);
add += cnt[u][v] - cnt[x-1][v] - cnt[u][y-1] + cnt[x-1][y-1];
}
if (j == i) add = (add - v[i].size()) / 2;
ans += add;
}
}
cout << ans << '\n';
}
} b3;
void solve () {
cin >> B >> N >> D >> M;
if (B == 1) b1.solve();
else if (B == 2) b2.solve();
else b3.solve();
}
signed main() {IOS solve(); return 0;}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |