#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int b, n, d, m, tree[1000099], p, t, arr[100099];
int noo[80][160][160];
void update(int i, int v){
while(i <= 1000000){
tree[i] += v;
i += i & -i;
}
}
int query(int a){
int cnt = 0;
while(a){
cnt += tree[a];
a -= a & -a;
}
return cnt;
}
struct Da{
int x, y, z;
bool operator <(const Da &a) const{
return y < a.y;
}
} mut[100099];
queue <Da> que;
int rect(int lv, int x1, int y1, int x2, int y2){
if(x1 < 1) x1 = 1;
if(y1 < 1) y1 = 1;
if(x2 > 2 * m) x2 = 2 * m;
if(y2 > 2 * m) y2 = 2 * m;
return noo[lv][x2][y2] - noo[lv][x1 - 1][y2] - noo[lv][x2][y1 - 1] + noo[lv][x1 - 1][y1 - 1];
}
int main()
{
scanf("%d %d %d %d", &b, &n, &d, &m);
if(b == 1){
for(int i = 1; i <= n; i ++){
scanf("%d", arr + i);
}
sort(arr + 1, arr + n + 1);
long long cnt = 0;
for(int i = 2; i <= n; i ++){
long long ind = lower_bound(arr + 1, arr + i, arr[i] - d) - arr;
cnt += i - ind;
}
printf("%lld", cnt);
return 0;
}
else if(b == 2){
if(2 * m <= d){
printf("%lld", (long long)(n) * (n - 1) / 2);
return 0;
}
for(int i = 1; i <= n; i ++){
scanf("%d %d", &p, &t);
mut[i] = {p - t + 3 * m, p + t};
}
long long cnt = 0;
sort(mut + 1, mut + n + 1);
for(int i = 1; i <= n; i ++){
while(que.size() && mut[i].y - que.front().y > d){
update(que.front().x, -1);
que.pop();
}
cnt += (long long) query(mut[i].x + d) - query(max(0, mut[i].x - d - 1));
que.push(mut[i]);
update(mut[i].x, 1);
}
printf("%lld", cnt);
}
else{
for(int i = 1; i <= n; i ++){
int x, y, z;
scanf("%d %d %d", &mut[i].x, &mut[i].y, &mut[i].z);
}
for(int i = 1; i <= n; i ++) noo[mut[i].z][mut[i].x - mut[i].y + m][mut[i].x + mut[i].y] ++;
for(int i = 1; i <= 2 * m; i ++){
for(int j = 1; j <= 2 * m; j ++){
for(int k = 1; k <= m; k ++){
noo[k][i][j] += noo[k][i - 1][j] + noo[k][i][j - 1] - noo[k][i - 1][j - 1];
}
}
}
int ret = 0, sr = 0;
for(int i = 1; i <= n; i ++){
for(int j = 1; j <= mut[i].z; j ++){
int k = d - (mut[i].z - j);
if(k < 0) continue;
int vv = rect(j, mut[i].x - mut[i].y - k + m, mut[i].x + mut[i].y - k, mut[i].x - mut[i].y + k + m, mut[i].x + mut[i].y + k);
if(j == mut[i].z) sr += vv - 1;
else ret += vv;
}
}
printf("%d", ret + sr / 2);
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
pairs.cpp: In function 'int main()':
pairs.cpp:44:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
44 | scanf("%d %d %d %d", &b, &n, &d, &m);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pairs.cpp:47:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
47 | scanf("%d", arr + i);
| ~~~~~^~~~~~~~~~~~~~~
pairs.cpp:64:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
64 | scanf("%d %d", &p, &t);
| ~~~~~^~~~~~~~~~~~~~~~~
pairs.cpp:83:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
83 | scanf("%d %d %d", &mut[i].x, &mut[i].y, &mut[i].z);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | 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... |