문제 링크: https://www.acmicpc.net/problem/17390
정렬 후, 누적합(prefix sum)을 만들어준 뒤 배열 맨앞에 0을 추가해주면 B[R]-B[L-1]로 구간합을 빠르게 구할 수 있습니다.
세그먼트 트리도 되겠지만.. 굳이?
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
int n, q;
cin >> n >> q;
vector<ll> v(n+1);
for (int i=1; i<n+1; ++i)
cin >> v[i];
sort(v.begin(), v.end());
for (int i=1; i<n+1; ++i)
v[i] += v[i - 1];
while (q--) {
int l, r;
cin >> l >> r;
cout << v[r] - v[l-1] << '\n';
}
return 0;
}
반응형
'Online Judge > 백준' 카테고리의 다른 글
[백준][C++] 1072: 게임 (0) | 2020.07.18 |
---|---|
[백준][C++] 1051: 숫자 정사각형 (0) | 2020.07.17 |
[백준][C++] 14425: 문자열 집합 (0) | 2020.07.16 |
[백준][C++] 14725: 개미굴 (0) | 2020.07.16 |
[백준][C++] 5052: 전화번호 목록 (0) | 2020.07.16 |