본문 바로가기

Beakjoon/binary search

[백준] 7795번 먹을 것인가 먹힐 것인가 (C++) - binary search

문제

https://www.acmicpc.net/problem/7795

 

7795번: 먹을 것인가 먹힐 것인가

심해에는 두 종류의 생명체 A와 B가 존재한다. A는 B를 먹는다. A는 자기보다 크기가 작은 먹이만 먹을 수 있다. 예를 들어, A의 크기가 {8, 1, 7, 3, 1}이고, B의 크기가 {3, 6, 1}인 경우에 A가 B를 먹을

www.acmicpc.net

코드

#include <iostream>
#include <algorithm>

using namespace std;

int a[20000];
int b[20000];

int main(){
  int t,n,m;
  cin >> t;
  while(t--){
    cin >> n >> m;
    for(int i=0; i<n; i++){
      cin >> a[i];
    }
    for(int i=0; i<m; i++){
      cin >> b[i];
    }
    sort(a,a+n);
    sort(b,b+m);
    int result=0;
    for(int i=0; i<n; i++){
      int low=0;
      int high=m-1;
      int x=a[i];
      while(low<=high){
        int mid=(low+high)/2;
        if(b[mid]>=x) high=mid-1;
        else low=mid+1;
      }
      result+=low;
    }
    cout << result << '\n';
  }
  return 0;
}

정리

 

참조