#include <iostream>

using namespace std;

int getRotateArrayMin(int *nArray, int n) {

  if(nArray==NULL || n<1)
    return -1;

  int low = 0;
  int high = n-1;

  int mid = (low+high)/2;
  while(nArray[low]>nArray[high]) {

    if(high-low==1) {
      mid = high;
      break;
    }

    if(nArray[mid]<nArray[low])
      high = mid;
    else
      low = mid;

    mid = (low+high)/2;
  }

  if(mid==(n-1)/2 && nArray[mid]>nArray[0])
    return -1;
  else
    return nArray[mid];
}


int main(int argc, char **argv) {

  int array[] = {5,6,7,8,1,2,3,4};

  for(int i=0; i<8; i++)
    cout << array[i] << " ";
  cout << endl;

  cout << getRotateArrayMin(array, 7) << endl;

  return 0;
}
