Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- using namespace std;
- int vvod (int x)
- {
- cout.flush();
- int y;
- cout << "?" << " " << x << endl;
- cin >> y;
- return y;
- }
- int bin (int razmer, int left, int right, int &result)
- {
- int i = 0;
- int middle;
- int pred_middle;
- int past_middle;
- i = (left + right) / 2;
- middle = vvod (i);
- pred_middle = vvod (i-1);
- if (right - left >= 2)
- {
- if (pred_middle > middle)
- {
- right = i;
- bin (razmer, left, right, result);
- }
- else if (pred_middle == middle)
- {
- right = i-1;
- bin (razmer, left, right, result);
- }
- else
- {
- past_middle = vvod(i+1);
- if (past_middle > middle)
- {
- left = i;
- bin (razmer, left, right, result);
- }
- else if (past_middle == middle)
- {
- left = i+1;
- bin (razmer, left, right, result);
- }
- else
- {
- result = i;
- }
- }
- }
- return result;
- }
- int poisk (int razmer)
- {
- int result = -1;
- int middle;
- int pred_middle;
- int past_middle;
- int shet_1 = 0, shet_2 = 0;
- int i = (razmer+1) / 2;
- middle = vvod (i);
- pred_middle = vvod (i-1);
- if (pred_middle > middle)
- {
- bin (razmer, 1, i, result);
- shet_1++;
- }
- else if (pred_middle == middle)
- {
- bin (razmer, 1, i-1, result);
- shet_1++;
- }
- else
- {
- past_middle = vvod(i+1);
- if (past_middle > middle)
- {
- bin (razmer, i, razmer, result);
- shet_2++;
- }
- else if (past_middle == middle)
- {
- bin (razmer, i+1, razmer, result);
- shet_2++;
- }
- else
- result = i;
- }
- if (result == -1 && shet_1 != 0)
- bin (razmer, i+1, razmer, result);
- else if (result == -1 && shet_2 != 0)
- bin (razmer, 1, i-1, result);
- return result;
- }
- int main()
- {
- cout.flush();
- long long n;
- cin >> n;
- int first_elem = 0, second_elem = 0, last_elem = 0, pred_last_elem = 0, index = 0;
- first_elem = vvod(1);
- second_elem = vvod(2);
- last_elem = vvod(n);
- pred_last_elem = vvod(n-1);
- if (last_elem > pred_last_elem)
- index = n;
- else if (first_elem > second_elem)
- index = 1;
- else index = poisk(n);
- cout << "! " << index << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement