
function lastRemaining(n: number): number {
let curr = 1
let remain = n
let toRight = true
let step = 1
while(remain > 1) {
if(toRight || (remain & 1) === 1) curr += step;
remain = Math.floor(remain / 2)
step *= 2
toRight = !toRight
}
return curr
};