提出 #33832428


ソースコード 拡げる

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXn = 16;
const int MAXpower2_n = 65536;

template <typename T>
inline void read(T &a) {
	char c;for (c = getchar(); (c < '0' || c > '9') && c != '-'; c = getchar());bool f = c == '-';T x = f ? 0 : (c ^ '0');for (c = getchar(); c >= '0' && c <= '9'; c = getchar()) {x = x * 10 + (c ^ '0');}a = f ? -x : x;
}
template <typename T, typename ...Argv>
inline void read(T &a, Argv &...argv) {
	read(a), read(argv...);
}

int n, power2n;
int a[MAXpower2_n + 10][MAXn + 10];

#define ls (id << 1)
#define rs (id << 1 | 1)
const int MAXnd = MAXpower2_n * 4;
int le[MAXnd + 10], ri[MAXnd + 10], len[MAXnd + 10], mid[MAXnd + 10];
vector<int> d[MAXnd + 10]; int mxd[MAXnd + 10];
void build(int id, int l, int r, int lay) {
	le[id] = l;
	ri[id] = r;
	mid[id] = (l + r) >> 1;
	len[id] = r - l + 1;
	d[id].resize(len[id]);
	if (le[id] == ri[id]) {
		d[id][0] = 0;
		mxd[id] = 0;
	} else {
		build(ls, le[id], mid[id], lay - 1);
		build(rs, mid[id] + 1, ri[id], lay - 1);
		for (int i = 0, I = 0; i < len[ls]; ++i, ++I) {
			d[id][I] = d[ls][i] + mxd[rs] + (a[le[id] + I][lay] - a[le[id] + I][lay - 1]);
			mxd[id] = max(mxd[id], d[id][I]);
		}
		for (int i = 0, I = mid[id] - le[id] + 1; i < len[rs]; ++i, ++I) {
			d[id][I] = d[rs][i] + mxd[ls] + (a[le[id] + I][lay] - a[le[id] + I][lay - 1]);
			mxd[id] = max(mxd[id], d[id][I]);
		}
	}
}

signed main() {
	read(n);
	power2n = 1;
	for (int i = 1; i <= n; ++i) power2n *= 2;
	for (int i = 1; i <= power2n; ++i) {
		for (int j = 1; j <= n; ++j) {
			read(a[i][j]);
		}
	}
	build(1, 1, power2n, n);
	printf("%lld\n", mxd[1]);
}

提出情報

提出日時
問題 F - Tournament
ユーザ rsdbk_husky
言語 C++ (GCC 9.2.1)
得点 500
コード長 1699 Byte
結果 AC
実行時間 85 ms
メモリ 39104 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 2
AC × 25
セット名 テストケース
Sample 00_sample_01.txt, 00_sample_02.txt
All 00_sample_01.txt, 00_sample_02.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 02_max_01.txt, 02_max_02.txt, 02_max_03.txt, 02_max_04.txt, 02_max_05.txt, 02_max_06.txt, 02_max_07.txt, 02_max_08.txt, 02_max_09.txt, 02_max_10.txt, 02_max_11.txt, 02_max_12.txt, 02_max_13.txt
ケース名 結果 実行時間 メモリ
00_sample_01.txt AC 23 ms 9760 KiB
00_sample_02.txt AC 11 ms 9768 KiB
01_random_01.txt AC 10 ms 9760 KiB
01_random_02.txt AC 8 ms 9692 KiB
01_random_03.txt AC 82 ms 39036 KiB
01_random_04.txt AC 10 ms 9884 KiB
01_random_05.txt AC 9 ms 9800 KiB
01_random_06.txt AC 81 ms 39020 KiB
01_random_07.txt AC 9 ms 9788 KiB
01_random_08.txt AC 85 ms 39100 KiB
01_random_09.txt AC 80 ms 39104 KiB
01_random_10.txt AC 12 ms 9720 KiB
02_max_01.txt AC 82 ms 38892 KiB
02_max_02.txt AC 81 ms 38944 KiB
02_max_03.txt AC 84 ms 39096 KiB
02_max_04.txt AC 84 ms 39092 KiB
02_max_05.txt AC 77 ms 39100 KiB
02_max_06.txt AC 81 ms 39004 KiB
02_max_07.txt AC 82 ms 39024 KiB
02_max_08.txt AC 83 ms 39104 KiB
02_max_09.txt AC 82 ms 38896 KiB
02_max_10.txt AC 83 ms 39096 KiB
02_max_11.txt AC 84 ms 38988 KiB
02_max_12.txt AC 81 ms 38904 KiB
02_max_13.txt AC 81 ms 38992 KiB