/*** https://mindcoding.ro/pb/bits ***/ #include #include using namespace std; int main() { int N; cin >> N; int* numbers = new int[N]; for (int i = 0; i < N; i++) { cin >> numbers[i]; } for (int i = 0; i < N; i++) { int currentNumber = numbers[i]; int* numberBits = new int[32]; int currentBitPosition = 0; while (currentNumber > 0) { numberBits[currentBitPosition] = currentNumber % 2; currentNumber /= 2; currentBitPosition++; } int potentialSwapIndex = -1; for (int j = currentBitPosition - 1; j >= 0; j--) { if (numberBits[j] == 0 && potentialSwapIndex == -1) { potentialSwapIndex = j; } if (numberBits[j] == 1 && potentialSwapIndex != -1) { numberBits[j] = 0; numberBits[potentialSwapIndex] = 1; break; } } int maxNumber = 0; for (int j = 0; j < currentBitPosition; j++) { maxNumber += numberBits[j] * pow(2, j); } cout << maxNumber << " "; } return 0; }