• Source
    1. #include<bits/stdc++.h>
    2. #define sz 50005
    3. using namespace std;
    4.  
    5. long long arr[sz];
    6.  
    7. bool found,tag,tag1;
    8.  
    9. int main()
    10. {
    11. long long n,q,i,j,first,last,middle,m,mid;
    12.  
    13. while(scanf("%lld",&n)==1)
    14. {
    15. for(i=1; i<=n; i++)
    16. {
    17. scanf("%lld",arr+i);
    18. }
    19.  
    20. scanf("%lld",&q);
    21.  
    22. for(j=1; j<=q; j++)
    23. {
    24.  
    25. scanf("%lld",&m);
    26.  
    27. found = false;
    28.  
    29. first = 1;
    30.  
    31. last = n ;
    32.  
    33. middle = (first+last)/2;
    34.  
    35. while( first <= last )
    36. {
    37. if ( arr[middle] < m )
    38. {
    39. first = middle + 1;
    40. }
    41. else if(arr[middle]==m)
    42. {
    43. found = true;
    44. break;
    45. }
    46. else
    47. {
    48. last = middle - 1;
    49. }
    50.  
    51. middle = (first + last)/2;
    52. }
    53.  
    54. if(found==false)
    55. {
    56. if(middle==0)
    57. {
    58. printf("X %lld\n",arr[middle+1]);
    59. }
    60. else if(middle == n)
    61. {
    62. printf("%lld X\n",arr[middle]);
    63. }
    64. else
    65. {
    66. printf("%lld %lld\n",arr[middle],arr[middle+1]);
    67. }
    68. }
    69. else
    70. {
    71. tag=tag1=false;
    72.  
    73. for(i=middle-1;i>=1;i--)
    74. {
    75. if(arr[i]==m)
    76. {
    77. continue;
    78. }
    79. else
    80. {
    81. tag = 1;
    82. printf("%lld",arr[i]);
    83. break;
    84. }
    85. }
    86. if(!tag)
    87. {
    88. printf("X");
    89. }
    90.  
    91. for(i=middle+1;i<=n;i++)
    92. {
    93. if(arr[i]==m)
    94. {
    95. continue;
    96. }
    97. else
    98. {
    99. tag1 = 1;
    100. printf(" %lld\n",arr[i]);
    101. break;
    102. }
    103. }
    104. if(!tag1)
    105. {
    106. printf(" X\n");
    107. }
    108. }
    109. }
    110. }
    111.  
    112. return 0;
    113. }