#include #include "vector" std::vector bit_repr(size_t num){ std::vector ret; while(num != 0){ ret.push_back(num % 2); num /= 2; } return ret; } size_t get_num_from_bit_repr(std::vector repr){ size_t num = 0; size_t mul = 1; for (size_t i = 0; i < repr.size(); ++i){ if(repr[i] == 1){ num += mul; } mul = mul * 2; } return num; } int main() { size_t n; std::cin >> n; std::vector nums; std::vector res; for(size_t i = 0; i < n; ++i){ size_t x; std::cin >> x; nums.push_back(x); } for(size_t numIdx = 0; numIdx < n; ++numIdx){ size_t num = nums[numIdx]; auto bits = bit_repr(num); ssize_t biggest_set = -1; for(size_t i = 0; i < bits.size(); ++i){ if(i >= res.size()){ res.push_back(0); } if(bits[i] == 0){ continue; } if (biggest_set > (ssize_t)i) { continue; } //bit is 1 //iterate until 0 is found => change it to 1 size_t j = i; while(res[j]){ ++j; if(j >= res.size()){ res.push_back(0); } } biggest_set = j; res[j] = 1; } } std::cout << get_num_from_bit_repr(res); return 0; }