Submission #35820


ソースコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <cstdio>
#include <cstring> //memcpy()
#include <climits> //INT_MIN
#define rep(i,n) for(int i=0; i<(n); ++i)
void merge_sort(int[], int , int);
void merge(int[], int , int , int);
// merge-sort マージソート
// 卍: O(N log N)
void sort(int a[], int n)
{
merge_sort(a, 0, n);
return;
}
void merge_sort(int a[], int left, int right)
{
if (left+1 < right) {
const int mid = (left + right) >> 1;
merge_sort(a, left, mid); //半開区間 [left, mid)
merge_sort(a, mid, right); //半開区間 [mid, right)
merge(a, left, mid, right);
}
return;
}
void merge(int a[], int left, int mid, int right)
{
static int L[52], R[52];
const int lenL = mid - left;
const int lenR = right - mid;
memcpy(L, a+left, sizeof(int) * lenL);
memcpy(R, a+mid, sizeof(int) * lenR);
L[lenL] = R[lenR] = INT_MIN;
int i=0, j=0;
for (int k=left; k<right; ++k) {
a[k] = (L[i] >= R[j]) ? L[i++] : R[j++];
}
}
int main()
{
int n;
int a[102];
scanf("%d", &n);
rep(i, n)
scanf("%d", a+i);
sort(a, n);
rep(i, n)
printf("%d\n", a[i]);
return (0);
}

ステータス

項目 データ
問題 0930 - 背の順
ユーザー名 Arumakan_ei1727
投稿日時 2018-05-16 20:12:37
言語 C++11
状態 Accepted
得点 1
ソースコード長 1216 Byte
最大実行時間 28 ms
最大メモリ使用量 588 KB

セット

セット 得点 Cases
1 ALL 1 / 1 *

テストケース

ファイル名 状態 実行時間 メモリ使用量 #
rnd_1.txt AC 21 ms 476 KB
1
rnd_2.txt AC 20 ms 588 KB
1
rnd_3.txt AC 24 ms 572 KB
1
rnd_4.txt AC 28 ms 428 KB
1
rnd_5.txt AC 20 ms 412 KB
1
sample.txt AC 17 ms 520 KB
1