Having some problems in CSES "Apartment" problem

I’ve tried to solve this question using binary search but I guess I got a wrong answer due to duplicates elements in a[i]. I need to optimize my code a bit but I don’t know how can anyone help me here.
problem Link: CSES - Apartments

I don’t think you need binary search for this problem rather a trivial two pointer on the sorted arrays will also do the job. There’s not much to explain unless you know two pointers. I’ve attached the AC code below.

AC_CODE
#include<bits/stdc++.h>
using namespace std ;
int main(){
  int n,m,k,ans=0;
  cin >> n >> m >> k ;
  vector<int>a(n),b(m) ;
  for(int &x:a)
    cin >> x  ;
  for(int &x:b)
    cin >> x ;
  sort(a.begin(),a.end()) ;
  sort(b.begin(),b.end()) ;
  for(int i=0,j=0;i<n;i++){
    while(j<m&&b[j]<a[i]-k)
      ++j ;
    if(j<m&&b[j]<=a[i]+k)
      ++ans,++j ;
  }
  cout << ans  ;
}
1 Like