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