提出 #26422869
ソースコード 拡げる
Copy
Copy
- #include <stdio.h>
- #include <stdlib.h>
-
- #define MOD_BY 1000000007
-
- int cmp(const void* x, const void* y) {
- int a = *(const int*)x, b = *(const int*)y;
- return a < b ? -1 : a > b;
- }
-
- int N, M;
- int A[212345];
- int B[212345];
-
- int left_count[212345], right_count[212345];
- int next_differ[212345];
-
- long long right_count_sum[212345];
-
- int main(void) {
- int i;
- int pos;
- int ans = 0;
- if (scanf("%d%d", &N, &M) != 2) return 1;
- for (i = 0; i < N; i++) {
- if (scanf("%d", &A[i]) != 1) return 1;
- }
- for (i = 0; i < M; i++) {
- if (scanf("%d", &B[i]) != 1) return 1;
- }
- qsort(A, N, sizeof(*A), cmp);
- qsort(B, M, sizeof(*B), cmp);
- for (i = N - 1, pos = M; i >= 0; i--) {
- while (pos > 0 && A[i] < B[pos - 1]) pos--;
- right_count[i] = M - pos;
- }
- for (i = 0, pos - 0; i < N; i++) {
- while (pos < M && B[pos] < A[i]) pos++;
- left_count[i] = pos;
- }
- next_differ[N - 1] = N;
- for (i = N - 2, pos = N; i >= 0; i--) {
- if (A[i] != A[i + 1]) pos = i + 1;
- next_differ[i] = pos;
- }
- for (i = N - 1; i >= 0; i--) {
- right_count_sum[i] = right_count_sum[i + 1] + right_count[i];
- }
- for (i = 0; i < N; i++) {
- ans = (int)((ans + left_count[i] * (right_count_sum[next_differ[i]] % MOD_BY)) % MOD_BY);
- }
- #if 0
- /* debug */
- for (i = 0; i < N; i++) {
- printf(" %d", left_count[i]);
- }
- puts("");
- for (i = 0; i < N; i++) {
- printf(" %d", right_count[i]);
- }
- puts("");
- for (i = 0; i < N; i++) {
- printf(" %d", (int)right_count_sum[i]);
- }
- puts("");
- #endif
- printf("%d\n", ans);
- return 0;
- }
#include <stdio.h>
#include <stdlib.h>
#define MOD_BY 1000000007
int cmp(const void* x, const void* y) {
int a = *(const int*)x, b = *(const int*)y;
return a < b ? -1 : a > b;
}
int N, M;
int A[212345];
int B[212345];
int left_count[212345], right_count[212345];
int next_differ[212345];
long long right_count_sum[212345];
int main(void) {
int i;
int pos;
int ans = 0;
if (scanf("%d%d", &N, &M) != 2) return 1;
for (i = 0; i < N; i++) {
if (scanf("%d", &A[i]) != 1) return 1;
}
for (i = 0; i < M; i++) {
if (scanf("%d", &B[i]) != 1) return 1;
}
qsort(A, N, sizeof(*A), cmp);
qsort(B, M, sizeof(*B), cmp);
for (i = N - 1, pos = M; i >= 0; i--) {
while (pos > 0 && A[i] < B[pos - 1]) pos--;
right_count[i] = M - pos;
}
for (i = 0, pos - 0; i < N; i++) {
while (pos < M && B[pos] < A[i]) pos++;
left_count[i] = pos;
}
next_differ[N - 1] = N;
for (i = N - 2, pos = N; i >= 0; i--) {
if (A[i] != A[i + 1]) pos = i + 1;
next_differ[i] = pos;
}
for (i = N - 1; i >= 0; i--) {
right_count_sum[i] = right_count_sum[i + 1] + right_count[i];
}
for (i = 0; i < N; i++) {
ans = (int)((ans + left_count[i] * (right_count_sum[next_differ[i]] % MOD_BY)) % MOD_BY);
}
#if 0
/* debug */
for (i = 0; i < N; i++) {
printf(" %d", left_count[i]);
}
puts("");
for (i = 0; i < N; i++) {
printf(" %d", right_count[i]);
}
puts("");
for (i = 0; i < N; i++) {
printf(" %d", (int)right_count_sum[i]);
}
puts("");
#endif
printf("%d\n", ans);
return 0;
}
提出情報
ジャッジ結果
セット名 |
Sample |
Subtask1 |
得点 / 配点 |
0 / 0 |
0 / 400 |
結果 |
|
|
セット名 |
テストケース |
Sample |
01s.txt, 02s.txt, 03s.txt |
Subtask1 |
01s.txt, 02s.txt, 03s.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt |
ケース名 |
結果 |
実行時間 |
メモリ |
01s.txt |
AC |
5 ms |
1748 KB |
02s.txt |
AC |
1 ms |
1696 KB |
03s.txt |
AC |
2 ms |
1696 KB |
04.txt |
AC |
1 ms |
1748 KB |
05.txt |
WA |
1 ms |
1700 KB |
06.txt |
AC |
1 ms |
1752 KB |
07.txt |
AC |
1 ms |
1648 KB |
08.txt |
AC |
1 ms |
1700 KB |
09.txt |
AC |
1 ms |
1672 KB |
10.txt |
AC |
1 ms |
1756 KB |
11.txt |
AC |
2 ms |
1704 KB |
12.txt |
AC |
39 ms |
4080 KB |
13.txt |
AC |
55 ms |
4784 KB |
14.txt |
AC |
101 ms |
7996 KB |
15.txt |
AC |
57 ms |
6436 KB |
16.txt |
AC |
57 ms |
6344 KB |
17.txt |
AC |
55 ms |
2952 KB |
18.txt |
AC |
58 ms |
6444 KB |
19.txt |
AC |
83 ms |
5316 KB |
20.txt |
AC |
99 ms |
7936 KB |
21.txt |
AC |
101 ms |
7992 KB |
22.txt |
AC |
102 ms |
7920 KB |
23.txt |
AC |
59 ms |
7620 KB |
24.txt |
AC |
62 ms |
7608 KB |
25.txt |
AC |
64 ms |
7624 KB |
26.txt |
WA |
65 ms |
7936 KB |