// M
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef long long ll;
template < typename T >
using ordered_set = tree < T , null_type , less < T > , rb_tree_tag, tree_order_statistics_node_update >;
const int N = 100005, MX2D = 75005, MX3D = 79;
int n, m, d, Mxd, ts, B[N], F[MX3D][MX3D][MX3D * 3];
vector < int > A[N];
ordered_set < ll > S2D[MX2D];
inline void Add2D(int a, int val)
{
ll vl = val * (ll)(1e6) + ts; ts ++;
for (a ++; a < MX2D; a += a & - a)
S2D[a].insert(vl);
}
inline int Count2D(int a, int val)
{
int rt = 0;
ll vl = val * (ll)(1e6) - 1;
for (; a; a -= a & - a)
rt += (int)S2D[a].size() - S2D[a].order_of_key(vl);
return rt;
}
inline void Add3D(int a, int b, int val)
{
val = MX3D * 3 - val - 3;
for (; a < MX3D; a += a & - a)
for (int d = b; d < MX3D; d += d & - d)
for (int i = val; i < MX3D * 3; i += i & - i)
F[a][d][i] ++;
}
inline int Count3D(int a, int b, int val)
{
int rt = 0;
val = MX3D * 3 - val - 3;
val = min(val, MX3D * 3 - 1);
for (; a; a -= a & - a)
for (int d = b; d; d -= d & - d)
for (int i = val; i; i -= i & - i)
rt += F[a][d][i];
return rt;
}
int main()
{
scanf("%d%d%d%d", &d, &n, &Mxd, &m);
if (d == 1)
{
ll tot = 0;
for (int i = 1; i <= n; i ++)
scanf("%d", &B[i]);
sort(B + 1, B + n + 1);
for (int i = 1; i <= n; i ++)
tot += (int)(upper_bound(B + 1, B + n + 1, B[i] + Mxd) - B) - i - 1;
return !printf("%lld\n", tot);
}
for (int i = 1; i <= n; i ++)
{
A[i] = vector < int > (d, 0);
for (int j = 0; j < d; j ++)
scanf("%d", &A[i][j]);
}
sort(A + 1, A + n + 1);
if (d == 2)
{
ll tot = 0;
for (int wy = 0; wy < 2; wy ++)
{
for (int i = 1; i <= n; i ++)
{
int vl = A[i][0] + A[i][1];
tot += Count2D(A[i][1] + wy, vl - Mxd);
Add2D(A[i][1], vl);
}
for (int i = 1; i <= n; i ++)
A[i][1] = MX2D - A[i][1] - 1;
for (int i = 0; i < MX2D; i ++)
S2D[i].clear();
}
return !printf("%lld\n", tot);
}
ll tot = 0;
for (int wy = 0; wy < 2; wy ++)
{
for (int wz = 0; wz < 2; wz ++)
{
for (int i = 1; i <= n; i ++)
{
int vl = A[i][0] + A[i][1] + A[i][2];
tot += Count3D(A[i][1] - wy, A[i][2] - wz, vl - Mxd);
Add3D(A[i][1], A[i][2], vl);
}
for (int i = 1; i <= n; i ++)
A[i][2] = 76 - A[i][2];
memset(F, 0, sizeof(F));
}
for (int i = 1; i <= n; i ++)
A[i][1] = 76 - A[i][1];
}
return !printf("%lld\n", tot);
}
Compilation message
pairs.cpp: In function 'int main()':
pairs.cpp:49:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
49 | scanf("%d%d%d%d", &d, &n, &Mxd, &m);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pairs.cpp:54:30: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
54 | scanf("%d", &B[i]);
| ~~~~~^~~~~~~~~~~~~
pairs.cpp:64:30: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
64 | scanf("%d", &A[i][j]);
| ~~~~~^~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
9 ms |
9728 KB |
Output is correct |
2 |
Correct |
9 ms |
9728 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
9 ms |
9728 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
32 ms |
10504 KB |
Output is correct |
2 |
Correct |
31 ms |
10488 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
43 ms |
11020 KB |
Output is correct |
2 |
Correct |
39 ms |
11020 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
41 ms |
11008 KB |
Output is correct |
2 |
Correct |
40 ms |
11000 KB |
Output is correct |
3 |
Correct |
37 ms |
11008 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
16 ms |
10240 KB |
Output is correct |
2 |
Correct |
15 ms |
10368 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1326 ms |
99996 KB |
Output is correct |
2 |
Correct |
1256 ms |
100052 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2263 ms |
89348 KB |
Output is correct |
2 |
Correct |
2324 ms |
89464 KB |
Output is correct |
3 |
Correct |
1851 ms |
90828 KB |
Output is correct |
4 |
Correct |
1941 ms |
89620 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2644 ms |
69880 KB |
Output is correct |
2 |
Correct |
2460 ms |
70008 KB |
Output is correct |
3 |
Correct |
1282 ms |
72168 KB |
Output is correct |
4 |
Correct |
1796 ms |
77816 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
16 ms |
15488 KB |
Output is correct |
2 |
Correct |
16 ms |
15488 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
140 ms |
19320 KB |
Output is correct |
2 |
Correct |
151 ms |
19192 KB |
Output is correct |
3 |
Correct |
144 ms |
19264 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
216 ms |
19520 KB |
Output is correct |
2 |
Correct |
209 ms |
19448 KB |
Output is correct |
3 |
Correct |
230 ms |
19500 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
243 ms |
19576 KB |
Output is correct |
2 |
Correct |
241 ms |
19448 KB |
Output is correct |
3 |
Correct |
246 ms |
19576 KB |
Output is correct |