Searching Local Minimum(交互 + 二分 1700)

 1 /**\
 2 https://codeforces.com/contest/1480/problem/C
 3 二分不断维护一个区间
 4 使得a[l - 1] > a[l], a[r] < a[r + 1]
 5 \**/
 6 #include <bits/stdc++.h>
 7 using namespace std;
 8 
 9 const int N = 1e5 + 10;
10 int n, a[N];
11 
12 void accept()
13 {
14     cin >> n;
15 
16     int l = 1, r = n;
17 
18     while(l < r)
19     {
20         int mid = (l + r) >> 1;
21         cout << "? " << mid << "\n";
22         fflush(stdout);
23         cout << "? " << mid + 1 << "\n";
24         fflush(stdout);
25         cin >> a[mid] >> a[mid + 1];
26 
27         if(a[mid] < a[mid + 1]) r = mid;
28         else l = mid + 1;
29     }
30 
31     cout << "! " << l << "\n";
32 }
33 signed main()
34 {
35     accept();
36     return 0;
37 }

 

posted @ 2022-03-22 14:08  std&ice  阅读(90)  评论(0编辑  收藏  举报