fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5. int t;
  6. cin >> t;
  7. while(t--){
  8. long long d,n,s,p;
  9. cin >> d >> n >> s >> p;
  10. // cout << d << " " << n << " " << s << " " << p << endl;
  11. long long a[n];
  12. map<int,int> c;
  13. int b[n];
  14. for(int i=0;i<n;i++){
  15. cin >> a[i];
  16. }
  17. sort(a,a+n);
  18. for(int i=0;i<n;i++){
  19. c[a[i]]++;
  20. b[i] = c[a[i]];
  21. }
  22. long long dist;
  23. if(p > s){
  24. dist = p - (s+1);
  25. }
  26. else{
  27. dist = s-1 - p;
  28. }
  29. // cout << dist << endl;
  30. // cout << high << endl;
  31. if(abs(s-p) == 1){
  32. cout << 0 << endl;
  33. }
  34. else{
  35. long long ans(-1);
  36. long long low = 0;
  37. long long high = dist-1;
  38. // cout << high << endl;
  39. high = min(high,n-1);
  40. // cout << high << endl;
  41. long long lim;
  42. if(p > s){
  43. lim = p-1;
  44. }
  45. else{
  46. lim = d - p;
  47. }
  48. lim--;
  49. // cout << lim << endl;
  50. while(low <= high){
  51. int mid = low + (high - low + 1)/2;
  52. long long midVal = a[mid];
  53. midVal = midVal + b[mid] - 1;
  54.  
  55. if(midVal < lim){
  56. ans = mid;
  57. low = mid + 1;
  58. }
  59. else if(midVal > lim){
  60. high = mid - 1;
  61. }
  62. else if(midVal == lim){
  63. ans = mid;
  64. break;
  65. }
  66. }
  67. cout << ans + 1 << endl;
  68. }
  69. }
  70. return 0;
  71. }
Success #stdin #stdout 0.01s 5408KB
stdin
3
7 2 3 6
1 4
7 2 3 6
5 1
7 2 3 6
4 4
stdout
2
1
1