#include <bits/stdc++.h>
using namespace std;
int max_index_in_bitonic_array(vector<int> A){
int low = 0;
int high = A.size() - 1;
while(low <= high){
int mid = low + (high - low) / 2;
if((A[mid] > A[mid - 1]) && (A[mid] > A[mid + 1])){
return mid;
}
if(A[mid] < A[mid - 1] && A[mid] > A[mid + 1]){
// max element lies on left
high = mid + 1;
}
else{
// max element lies on right
low = mid - 1;
}
}
}
int binary_search(int low, int high, vector<int> A, int B){
while(low <= high){
int mid = low + (high - low) / 2;
if(A[mid] == B){
return mid;
}
if(A[mid] < B){
low = mid + 1;
}
if(A[mid] > B){
high = mid - 1;
}
}
return -1;
}
int solve(vector<int> &A, int B) {
// Find the max point in the array
int max_index = max_index_in_bitonic_array(A);
cout<<max_index<<endl;
// Perform 2 binarcy searches
int result = binary_search(0, max_index, A, B);
cout<<result<<endl;
if(result == -1){
return binary_search(max_index + 1, A.size(), A, B);
}
return result;
}
int main() {
// your code goes here
vector<int> a;
// 1, 2, 3, 4, 5, 10, 9, 8, 7, 6
// 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.push_back(5);
a.push_back(6);
a.push_back(7);
a.push_back(8);
a.push_back(9);
a.push_back(10);
a.push_back(20);
a.push_back(19);
a.push_back(18);
a.push_back(17);
a.push_back(16);
a.push_back(15);
a.push_back(14);
a.push_back(13);
a.push_back(12);
a.push_back(11);
cout<<solve(a, 12);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKaW50IG1heF9pbmRleF9pbl9iaXRvbmljX2FycmF5KHZlY3RvcjxpbnQ+IEEpewogICAgaW50IGxvdyA9IDA7CiAgICBpbnQgaGlnaCA9IEEuc2l6ZSgpIC0gMTsKICAgIHdoaWxlKGxvdyA8PSBoaWdoKXsKICAgICAgICBpbnQgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cpIC8gMjsKICAgICAgICBpZigoQVttaWRdID4gQVttaWQgLSAxXSkgJiYgKEFbbWlkXSA+IEFbbWlkICsgMV0pKXsKICAgICAgICAgICAgcmV0dXJuIG1pZDsKICAgICAgICB9CiAgICAgICAgaWYoQVttaWRdIDwgQVttaWQgLSAxXSAmJiBBW21pZF0gPiBBW21pZCArIDFdKXsKICAgICAgICAgICAgLy8gbWF4IGVsZW1lbnQgbGllcyBvbiBsZWZ0CiAgICAgICAgICAgIGhpZ2ggPSBtaWQgKyAxOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICAvLyBtYXggZWxlbWVudCBsaWVzIG9uIHJpZ2h0CiAgICAgICAgICAgIGxvdyA9IG1pZCAtIDE7CiAgICAgICAgfQogICAgfQp9CgoKCmludCBiaW5hcnlfc2VhcmNoKGludCBsb3csIGludCBoaWdoLCB2ZWN0b3I8aW50PiBBLCBpbnQgQil7CiAgICB3aGlsZShsb3cgPD0gaGlnaCl7CiAgICAgICAgaW50IG1pZCA9IGxvdyArIChoaWdoIC0gbG93KSAvIDI7CiAgICAgICAgaWYoQVttaWRdID09IEIpewogICAgICAgICAgICByZXR1cm4gbWlkOwogICAgICAgIH0KICAgICAgICBpZihBW21pZF0gPCBCKXsKICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKICAgICAgICB9CiAgICAgICAgaWYoQVttaWRdID4gQil7CiAgICAgICAgICAgIGhpZ2ggPSBtaWQgLSAxOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAtMTsKfQoKCmludCBzb2x2ZSh2ZWN0b3I8aW50PiAmQSwgaW50IEIpIHsKICAgIC8vIEZpbmQgdGhlIG1heCBwb2ludCBpbiB0aGUgYXJyYXkKICAgIGludCBtYXhfaW5kZXggPSBtYXhfaW5kZXhfaW5fYml0b25pY19hcnJheShBKTsKICAgIGNvdXQ8PG1heF9pbmRleDw8ZW5kbDsKICAgIAogICAgLy8gUGVyZm9ybSAyIGJpbmFyY3kgc2VhcmNoZXMKICAgIGludCByZXN1bHQgPSBiaW5hcnlfc2VhcmNoKDAsIG1heF9pbmRleCwgQSwgQik7CiAgICBjb3V0PDxyZXN1bHQ8PGVuZGw7CiAgICBpZihyZXN1bHQgPT0gLTEpewogICAgICAgIHJldHVybiBiaW5hcnlfc2VhcmNoKG1heF9pbmRleCArIDEsIEEuc2l6ZSgpLCBBLCBCKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7Cn0KCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJdmVjdG9yPGludD4gYTsKCS8vIDEsIDIsIDMsIDQsIDUsIDEwLCA5LCA4LCA3LCA2CgkvLyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMjAsIDE5LCAxOCwgMTcsIDE2LCAxNSwgMTQsIDEzLCAxMiwgMTEgCglhLnB1c2hfYmFjaygxKTsKCWEucHVzaF9iYWNrKDIpOwoJYS5wdXNoX2JhY2soMyk7CglhLnB1c2hfYmFjayg0KTsKCWEucHVzaF9iYWNrKDUpOwoJYS5wdXNoX2JhY2soNik7CglhLnB1c2hfYmFjayg3KTsKCWEucHVzaF9iYWNrKDgpOwoJYS5wdXNoX2JhY2soOSk7CglhLnB1c2hfYmFjaygxMCk7CglhLnB1c2hfYmFjaygyMCk7CglhLnB1c2hfYmFjaygxOSk7CglhLnB1c2hfYmFjaygxOCk7CglhLnB1c2hfYmFjaygxNyk7CglhLnB1c2hfYmFjaygxNik7CglhLnB1c2hfYmFjaygxNSk7CglhLnB1c2hfYmFjaygxNCk7CglhLnB1c2hfYmFjaygxMyk7CglhLnB1c2hfYmFjaygxMik7CglhLnB1c2hfYmFjaygxMSk7CgkKCWNvdXQ8PHNvbHZlKGEsIDEyKTsKCQoJcmV0dXJuIDA7Cn0=