#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> computePowerArray(const vector<int>& A) {
const int BITS = 20;
vector<int> result(BITS, 0);
for (int i = 0; i < BITS; ++i) {
int requiredMask = (1 << (i + 1)) - 1; // all bits from 0 to i
int currentMask = 0, count = 0;
vector<int> sortedA = A;
sort(sortedA.begin(), sortedA.end(), greater<int>()); // greedy pick
for (int val : sortedA) {
currentMask |= val;
++count;
if ((currentMask & requiredMask) == requiredMask) {
result[i] = count;
break;
}
}
}
return result;
}
void runTest(const vector<int>& input) {
vector<int> output = computePowerArray(input);
for (int x : output) cout << x << " ";
cout << endl;
}
int main() {
cout << "Test Case 1: [1, 2, 3, 4, 5]" << endl;
runTest({1, 2, 3, 4, 5});
cout << "Test Case 2: [4, 16, 16, 36, 36]" << endl;
runTest({4, 16, 16, 36, 36});
cout << "Test Case 3: [5, 5, 3, 2, 1, 1]" << endl;
runTest({5, 5, 3, 2, 1, 1});
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdmVjdG9yPGludD4gY29tcHV0ZVBvd2VyQXJyYXkoY29uc3QgdmVjdG9yPGludD4mIEEpIHsKICAgIGNvbnN0IGludCBCSVRTID0gMjA7CiAgICB2ZWN0b3I8aW50PiByZXN1bHQoQklUUywgMCk7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBCSVRTOyArK2kpIHsKICAgICAgICBpbnQgcmVxdWlyZWRNYXNrID0gKDEgPDwgKGkgKyAxKSkgLSAxOyAvLyBhbGwgYml0cyBmcm9tIDAgdG8gaQogICAgICAgIGludCBjdXJyZW50TWFzayA9IDAsIGNvdW50ID0gMDsKCiAgICAgICAgdmVjdG9yPGludD4gc29ydGVkQSA9IEE7CiAgICAgICAgc29ydChzb3J0ZWRBLmJlZ2luKCksIHNvcnRlZEEuZW5kKCksIGdyZWF0ZXI8aW50PigpKTsgLy8gZ3JlZWR5IHBpY2sKCiAgICAgICAgZm9yIChpbnQgdmFsIDogc29ydGVkQSkgewogICAgICAgICAgICBjdXJyZW50TWFzayB8PSB2YWw7CiAgICAgICAgICAgICsrY291bnQ7CgogICAgICAgICAgICBpZiAoKGN1cnJlbnRNYXNrICYgcmVxdWlyZWRNYXNrKSA9PSByZXF1aXJlZE1hc2spIHsKICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IGNvdW50OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKfQoKdm9pZCBydW5UZXN0KGNvbnN0IHZlY3RvcjxpbnQ+JiBpbnB1dCkgewogICAgdmVjdG9yPGludD4gb3V0cHV0ID0gY29tcHV0ZVBvd2VyQXJyYXkoaW5wdXQpOwogICAgZm9yIChpbnQgeCA6IG91dHB1dCkgY291dCA8PCB4IDw8ICIgIjsKICAgIGNvdXQgPDwgZW5kbDsKfQoKaW50IG1haW4oKSB7CiAgICBjb3V0IDw8ICJUZXN0IENhc2UgMTogWzEsIDIsIDMsIDQsIDVdIiA8PCBlbmRsOwogICAgcnVuVGVzdCh7MSwgMiwgMywgNCwgNX0pOwoKICAgIGNvdXQgPDwgIlRlc3QgQ2FzZSAyOiBbNCwgMTYsIDE2LCAzNiwgMzZdIiA8PCBlbmRsOwogICAgcnVuVGVzdCh7NCwgMTYsIDE2LCAzNiwgMzZ9KTsKCiAgICBjb3V0IDw8ICJUZXN0IENhc2UgMzogWzUsIDUsIDMsIDIsIDEsIDFdIiA8PCBlbmRsOwogICAgcnVuVGVzdCh7NSwgNSwgMywgMiwgMSwgMX0pOwoKICAgIHJldHVybiAwOwp9Cg==
Test Case 1: [1, 2, 3, 4, 5]
1 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Test Case 2: [4, 16, 16, 36, 36]
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Test Case 3: [5, 5, 3, 2, 1, 1]
1 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0