Advertisement
uzimane_

Нахождение количества единиц в отсортированном бинарном масс

Jul 10th, 2020
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.91 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <cmath>
  4. int* mas;
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9. cout.flush();
  10.  
  11. int n, h, check = 0;
  12. scanf("%d", &n);
  13. if (n <= 0)
  14. {
  15. printf("!");
  16. printf(" %d", 0);
  17. check = 1;
  18. }
  19. if (check == 0)
  20. {
  21. mas = new int[n+1];
  22. for (int i = 1; i <= n+1; i++)
  23. {
  24. mas[i] = -1;
  25. }
  26. int l, r, m, ans;
  27. l = 1;
  28. r = n;
  29.  
  30. while (l - r < 0)
  31. {
  32. m = (l + r + 1) / 2;
  33. if (mas[m] >= 0)
  34. h = mas[m];
  35. else
  36. {
  37. printf("? %d\n", m);
  38. fflush(stdout);
  39. scanf("%d", &h);
  40. mas[m] = h;
  41. }
  42. mas[m] = h;
  43. if (h <= 0)
  44. {
  45. l = m;
  46. }
  47. else
  48. {
  49. r = m - 1;
  50. }
  51. }
  52. if (mas[l] != -1)
  53. h = mas[l];
  54. else
  55. {
  56. printf("? %d\n", l);
  57. fflush(stdout);
  58. scanf("%d", &h);
  59. }
  60. if (h == 0)
  61. {
  62. ans = n - l;
  63. }
  64. if (h == 1)
  65. {
  66. ans = n;
  67. }
  68. printf("!");
  69. printf(" %d", ans);
  70. }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement