Submission #67672005


Source Code Expand

#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
AC × 1
AC × 26
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