250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준#boj#12755
- 백준#BOJ#12865#평범한배낭
- 백준#BOJ#1939#중량제한
- 백준#BOJ#14501#퇴사#브루트포스
- 백준#BOJ#8012#한동이는영업사원
- 백준#boj#16932#모양만들기
- 백준#BOJ#2615#오목
Archives
- Today
- Total
순간을 성실히, 화려함보단 꾸준함을
[ boj : 2776 ] 암기왕 본문
문제 : 배열1이 주어지고 배열2가 주어질때 배열 1에 배열2의 수들이 존재하는지 여부를 구하여라
해설 : 기초적인 이분탐색 문제입니다.
오랜만에 sort를 직접 구현했습니다. 안짜게 되면 당연스럽게 까먹더라구요. 그래서 상기좀 시킬겸 mergesort를 구현했습니다.
#include<bits/stdc++.h>
using namespace std;
int arr[(int)1e6],num[(int)1e6];
void solve();
void mergesort(int l, int r);
void merge(int l, int mid, int r);
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
while (t--)
solve();
return 0;
}
void solve()
{
int n,m;
cin >> n;
for (int i = 0; i < n; i++)
cin >> arr[i];
mergesort(0, n - 1);
cin >> m;
int x;
for (int i = 0; i < m; i++) {
cin >> x;
int ans = 0;
int l = 0,r=n-1;
while (l <= r)
{
int mid = (l + r) / 2;
if (arr[mid] > x)
r = mid - 1;
else if(arr[mid]<x)
l = mid + 1;
else {
ans = 1;
break;
}
}
cout << ans << "\n";
}
}
void mergesort(int l, int r)
{
if (l >= r)return;
int mid = (l + r) / 2;
mergesort(l, mid);
mergesort(mid + 1, r);
merge(l, mid, r);
}
void merge(int l, int mid, int r)
{
int p = l, q = mid+1;
int k = 0;
while (p <= mid && q <= r)
{
if (arr[p] < arr[q])
num[k++] = arr[p++];
else
num[k++] = arr[q++];
}
while (p <= mid)
num[k++] = arr[p++];
while (q <= r)
num[k++] = arr[q++];
k = 0;
for (int i = l; i <= r; i++)
arr[i] = num[k++];
}
'알고리즘,SQL > 백준,BOJ' 카테고리의 다른 글
[ boj : 11663 ] 선분 위의 점 (0) | 2021.03.14 |
---|---|
[ boj : 11561 ] 징검다리 (0) | 2021.03.13 |
[ boj : 20551 ] Sort 마스터 배지훈의 후계자 (0) | 2021.03.10 |
[ boj : 2428 ] 표절 (0) | 2021.03.09 |
[ boj : 2417 ] 정수 제곱근 (0) | 2021.03.08 |