#include #include #include #include #include #include #include long int longestSequence(int a_size, long int* a) { // Return the length of the longest possible sequence of moves. int i; long int result=0; a_size=a_size-1; while(a_size>=0) { //printf("in while=%ld\n",a[a_size]); if(a[a_size]%2==0) { for(i=a[a_size];i>2;i=i/2) { // printf("in if=%ld\t %d\n",result,i); result=result+i; } result=result+1; } else if(a[a_size]==1) { result=result+1; } else { result=result+a[a_size]+1; //printf("in else=%ld\n",result); } a_size--; } return result; } int main() { int n; scanf("%i", &n); long int *a = malloc(sizeof(long int) * n); for (int a_i = 0; a_i < n; a_i++) { scanf("%li",&a[a_i]); } long int result = longestSequence(n, a); printf("%ld\n", result); return 0; }