* ๋์ ํฉ: ์ด๋ค ๋ฐฐ์ด์ ์ ์์๋ถํฐ ๋์ ๋ ํฉ์ ์ ์ฅํ ๋ฐฐ์ด.
์์์๋ถํฐ ๋ํ๋ prefix sum๊ณผ ๋ค์์ ๋ถํฐ ๋ํ๋ suffix sum ์ด ์๋ค.
๋ฐฐ์ด์ ๊ฐ์ด ๋ณํ์ง ์๋ ์ ์ ๋ณ์์๋ง ์ฌ์ฉํ ์ ์๋ค.
* ๋์ ํฉ์ด ํ์ํ ์์๋ฌธ์
๋ฌธ์ ์น์ฒ ์ด๋ ๋๋ฅผ ์์ด๋ฒ๋ ธ๋ค. ํ๊ต์ ๊ฐ๋๋ ์ ์๋์ด ์์ฐ์๋ก ์ด๋ฃจ์ด์ง N๊ฐ์ ์นด๋๋ฅผ ์ฃผ๋ฉฐ M๊ฐ์ ์ง๋ฌธ์ ๋์ง๋ค. ๊ทธ ์ง๋ฌธ์ ๋์ดํ ์นด๋ ์ค A๋ฒ์งธ๋ถํฐ B๋ฒ์งธ๊น์ง์ ํฉ์ ๊ตฌํ๋ ๊ฒ์ด๋ค. ๋๋ฅผ ์์ด๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์ ์น์ฒ ์ด๋ ์ด ๋ฌธ์ ๋ฅผ ํ ์๊ฐ ์๋ค. ๋ฌธ์ ๋ฅผ ํ ์ ์๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ณด์. ์ ๋ ฅ ์์ ๊ฐ์N, ํฉ์ ๊ตฌํด์ผ ํ๋ ํ์ M, ๊ทธ ์ดํ N๊ฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์๋ 100์ดํ์ ์์ฐ์. ๊ทธ ์ดํ M๊ฐ์ ์ค์๋ ํฉ์ ๊ตฌํด์ผ ํ๋ ๊ตฌ๊ฐ A, B๊ฐ ์ฃผ์ด์ง๋ค. ์ถ๋ ฅ M๊ฐ์ ์ค์ A๋ถํฐ B๊น์ง์ ํฉ์ ๊ตฌํ๋ผ. ๋ฒ์ 1 <= N <= 100,000 1 <= M <= 100,000 1 <= A <= B <= N ์์ ์ ๋ ฅ 8 3 1 2 3 4 5 6 7 8 1 4 1 5 3 5 ์์ ์ถ๋ ฅ 10 15 12 |
์ ๋ฌธ์ ๋ฅผ ๋จ์ 2์ค for๋ฌธ์ผ๋ก ํ๋ฉด ๋ฌธ์ ์ ์ต๋ ๋ฒ์ 100,000 * 100,000 ๋ฒ์ผ๋ก 10,000,000,000๋ฒ(100์ต๋ฒ) ์ ์๊ฐ ๋์์ ์๊ฐ๋ณต์ก๋์ ๋ฒ์๋ฅผ ๋์ด์ ๋ค.
๋ฐ๋ผ์ ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํด์ผ ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ์ด๋ ๊ฒ ๋ฐฐ์ด์ด ์ฃผ์ด์ง๊ณ ๊ทธ ๋ฐฐ์ด์ ์ฐ์๋ ํฉ์ ๋์ ํด์ ๊ฐ๊ณ ์๋ ํํ๊ฐ ํ์ํ ๋ '๋์ ํฉ' ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
//๊ทธ๋ฅ 2์ค ๋ฐ๋ณต๋ฌธ์ผ๋ก ํ์์ ๋
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m, a, b;
cin >> n >> m;
vector<int> v(n+1);
for (int i = 1; i <= n; i++){
cin >> v[i];
}
for (int i = 0; i < m; i++) {
int sum = 0;
cin >> a >> b;
for (int j = a; j <= b; j++) {
sum += v[j];
}
cout << sum << '\n';
}
return 0;
}
//๋์ ํฉ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ ๊ฒฝ์ฐ
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m, a, b;
cin >> n >> m;
vector<int> v(n+1);
for (int i = 1; i <= n; i++){
cin >> v[i];
v[i] += v[i - 1];
}
for (int i = 0; i < m; i++) {
cin >> a >> b;
cout << v[b] - v[a - 1] << '\n';
}
return 0;
}
๋์ ํฉ์ ์ด์ฉํ๋ฉด ์๊ฐ๋ณต์ก๋๊ฐ O(n)์ผ๋ก ์ค์ด๋ ๋ค.