From fa496ca42e16de5aa8b2b81847f80b0b3450e73d Mon Sep 17 00:00:00 2001 From: hanyixuanten <105723997+hanyixuanten@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:40:32 +0800 Subject: [PATCH] new file: P15256.cpp --- P15256.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 P15256.cpp diff --git a/P15256.cpp b/P15256.cpp new file mode 100644 index 0000000..331e5c6 --- /dev/null +++ b/P15256.cpp @@ -0,0 +1,43 @@ +#include +using namespace std; +typedef long long ll; + +int main() { + int N, Q; + scanf("%d %d", &N, &Q); + vector a(N + 1); + for (int i = 1; i <= N; ++i) { + scanf("%lld", &a[i]); + } + const int MAXI = 31; + vector dp(MAXI + 2, 0); + dp[1] = a[1]; + for (int i = 2; i <= MAXI; ++i) { + if (i <= N) + dp[i] = min(a[i], 2 * dp[i - 1]); + else + dp[i] = 2 * dp[i - 1]; + } + + while (Q--) { + ll x; + scanf("%lld", &x); + ll ans = LLONG_MAX; + ll cur_cost = 0; + bool tight = true; + for (int i = 30; i >= 0; --i) { + if (tight) { + if ((x >> i) & 1LL) { + cur_cost += dp[i + 1]; + } else { + ans = min(ans, cur_cost + dp[i + 1]); + } + } else { + break; + } + } + ans = min(ans, cur_cost); + printf("%lld\n", ans); + } + return 0; +} \ No newline at end of file