### Finding largest element in array having first increasing then decreasing elements in O(LogN)

```//Array which has n elements in it.
//1st element->a[k] ascending order.
//a[k]->last element descending order.
//Find largest element in this array.
//
//Example :
//1 2 3 4 3 2 1
//Output 4

char calculateOrder(int first, int second, int third)
{
//desc
if (second< first && second > third)
{
return 'd';
}
else if (second > first && second < third)
{
return 'a';
}
else
{
return '0';
}
}

int CompareThree(int first, int second, int third)
{
//max of three
if (first>second && first > third)
return first;
else if (second> first && second > third)
return second;
else
return third;
}

void kElement(int arrIntegers[], int left, int right)
{
int mid = (left + right) / 2;

//Calculate order of mid-1, mid, mid+1

char order = calculateOrder(arrIntegers[mid - 1], arrIntegers[mid], arrIntegers[mid + 1]);
if (order == 'd') //discard right
{
kElement(arrIntegers, left, mid);
}
else if (order == 'a')
{
kElement(arrIntegers, mid, right);
}
else
{
printf("%d", CompareThree(arrIntegers[left], arrIntegers[mid], arrIntegers[right]));
return;
}
}

int main()
{
int intArray[6] = { 1,2,3,4,3,2 };
kElement(intArray, 0, 5);
return 1;
}
```