class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int findPeakElement(vector<int>& nums) {
        // write code here
        switch (nums.size()) {
            case 1: return 0;
            case 2: return nums[0] > nums[1] ? 0 : 1;
            default:; 
        }
        int left = 0, right = nums.size() - 1;
        while(left < right){
            int mid = (left + right) / 2;
            int state = (nums[mid] > nums[mid-1]) | ((nums[mid] > nums[mid+1]) << 1);
            bool end = mid==left+1&&mid==right-1;
            switch (state) {
                case 0b00: if(nums[mid+1]>nums[mid-1]) {if(end) return left; else right=mid; }else{if(end) return right; else left = mid;} break;
                if(end) return nums[left]>nums[right]?left:right; else ;
                case 0b01: if(end) return right; else left=mid; break;
                case 0b10: if(end) return left; else right=mid; break;
                case 0b11: return mid;
            }
        }
        return left;
    }
};