int lastRemaining(int n){ return (n==1)?1 :2 * (n/2 - lastRemaining(n/2) + 1); }
int lastRemaining(int n){ int stack[100]={0}, pst=-1, i, res=1; for(i=0; n>1; i++){ if (i%2==0) stack[++pst]=2; else{ stack[++pst]=(n%2)?2 :1; } n/=2; } for (i=pst; i>=0; i--){ res=(stack[i]==2)?res*2 :res*2-1; } return res; }