- 문제 링크 : boj.kr/28018
- 난이도 : G5
- 태그 : 누적합
코드
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define INF 0x7FFFFFFF
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n;
cin >> n;
int arr[1000002] = {};
for(int i = 0; i < n; i++) {
int s, e;
cin >> s >> e;
arr[s] += 1;
arr[e+1] -= 1;
}
for(int i = 1; i < 1000002; i++) {
arr[i] += arr[i-1];
}
int q;
cin >> q;
for(int i = 0; i < q; i++) {
int x;
cin >> x;
cout << arr[x] << "\n";
}
return 0;
}
풀이
arr[s_i]에 +1, arr[e_i + 1]에 -1을 하고, 이 배열을 기준으로 누적합을 구한다. 이 누적합 배열의 원소가 그 시간에 존재한 사람의 수가 된다.
728x90
'PS' 카테고리의 다른 글
BOJ 18869 : 멀티버스 Ⅱ (0) | 2024.06.12 |
---|---|
BOJ 1414 : 불우이웃돕기 (0) | 2024.06.11 |
BOJ 2487 : 섞기 순열 (0) | 2024.06.09 |
BOJ 24023 : 아기 홍윤 (1) | 2024.06.08 |
BOJ 20666 : 인물이와 정수 (1) | 2024.06.07 |