Submission #67672005
Source Code Expand
Copy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <stdio.h>
#define KI_MAX (1 << 18)
int ki[KI_MAX * 2 - 1];
int ookikunaihou(int a, int b) {
return a <= b ? a : b;
}
void ki_set(int pos, int value) {
pos += KI_MAX - 1;
ki[pos] = value;
do {
pos = (pos - 1) / 2;
ki[pos] = ookikunaihou(ki[pos * 2 + 1], ki[pos * 2 + 2]);
} while (pos > 0);
}
int ki_get_i(int idx, int ss, int se, int qs, int qe) {
if (qs <= ss && se <= qe) { /* セグメントがクエリに完全に含まれる */
return ki[idx];
} else if (se <= qs || qe <= ss) { /* 完全に外れている */
return KI_MAX * 2;
} else {
int sm = ss + (se - ss) / 2;
int l = ki_get_i(idx * 2 + 1, ss, sm, qs, qe);
int r = ki_get_i(idx * 2 + 2, sm, se, qs, qe);
return ookikunaihou(l, r);
}
}
int ki_get(int qs, int qe) {
return ki_get_i(0, 0, KI_MAX, qs, qe);
}
int N;
int P[KI_MAX];
int first;
void calc(int s, int e) {
if (s + 1 == e) {
printf(" %d" + first, P[s]);
first = 0;
} else {
int m = s + (e - s) / 2;
int left = ki_get(s, m);
int all = ki_get(s, e);
if (left == all) {
/* 前半分に最小の要素がある */
calc(s, m);
calc(m, e);
} else {
/* 前半分に最小の要素がない → 後ろ半分にある */
calc(m, e);
calc(s, m);
}
}
}
int main(void) {
int T, tc;
if (scanf("%d", &T) != 1) return 1;
for (tc = 0; tc < T; tc++) {
int i;
if (scanf("%d", &N) != 1) return 1;
for (i = 0; i < (1 << N); i++) {
if (scanf("%d", &P[i]) != 1) return 1;
ki_set(i, P[i]);
}
first = 1;
calc(0, 1 << N);
putchar('\n');
}
return 0;
}
/*
より小さい数値があるほうを先に持っていく
*/
Submission Info
Submission Time |
|
Task |
E - Reverse 2^i |
User |
mikecat |
Language |
C (gcc 12.2.0) |
Score |
450 |
Code Size |
1707 Byte |
Status |
AC |
Exec Time |
121 ms |
Memory |
5296 KiB |
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
450 / 450 |
Status |
|
|
Set Name |
Test Cases |
Sample |
00_sample_00.txt |
All |
00_sample_00.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt |
Case Name |
Status |
Exec Time |
Memory |
00_sample_00.txt |
AC |
1 ms |
1672 KiB |
01_test_00.txt |
AC |
1 ms |
1772 KiB |
01_test_01.txt |
AC |
1 ms |
1784 KiB |
01_test_02.txt |
AC |
94 ms |
1644 KiB |
01_test_03.txt |
AC |
8 ms |
1624 KiB |
01_test_04.txt |
AC |
107 ms |
1696 KiB |
01_test_05.txt |
AC |
106 ms |
1764 KiB |
01_test_06.txt |
AC |
109 ms |
1776 KiB |
01_test_07.txt |
AC |
110 ms |
1676 KiB |
01_test_08.txt |
AC |
114 ms |
2244 KiB |
01_test_09.txt |
AC |
115 ms |
2364 KiB |
01_test_10.txt |
AC |
115 ms |
2276 KiB |
01_test_11.txt |
AC |
119 ms |
5296 KiB |
01_test_12.txt |
AC |
121 ms |
3728 KiB |
01_test_13.txt |
AC |
115 ms |
2792 KiB |
01_test_14.txt |
AC |
93 ms |
2060 KiB |
01_test_15.txt |
AC |
98 ms |
5064 KiB |
01_test_16.txt |
AC |
98 ms |
5052 KiB |
01_test_17.txt |
AC |
98 ms |
5048 KiB |
01_test_18.txt |
AC |
98 ms |
5148 KiB |
01_test_19.txt |
AC |
106 ms |
5072 KiB |
01_test_20.txt |
AC |
106 ms |
5040 KiB |
01_test_21.txt |
AC |
105 ms |
5056 KiB |
01_test_22.txt |
AC |
106 ms |
5036 KiB |
01_test_23.txt |
AC |
105 ms |
5064 KiB |
01_test_24.txt |
AC |
105 ms |
5056 KiB |