https://www.acmicpc.net/problem/11660
๋ฌธ์
N×N๊ฐ์ ์๊ฐ N×N ํฌ๊ธฐ์ ํ์ ์ฑ์์ ธ ์๋ค. (x1, y1)๋ถํฐ (x2, y2)๊น์ง ํฉ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. (x, y)๋ xํ y์ด์ ์๋ฏธํ๋ค.
์๋ฅผ ๋ค์ด, N = 4์ด๊ณ , ํ๊ฐ ์๋์ ๊ฐ์ด ์ฑ์์ ธ ์๋ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด์.
1 | 2 | 3 | 4 |
2 | 3 | 4 | 5 |
3 | 4 | 5 | 6 |
4 | 5 | 6 | 7 |
์ฌ๊ธฐ์ (2, 2)๋ถํฐ (3, 4)๊น์ง ํฉ์ ๊ตฌํ๋ฉด 3+4+5+4+5+6 = 27์ด๊ณ , (4, 4)๋ถํฐ (4, 4)๊น์ง ํฉ์ ๊ตฌํ๋ฉด 7์ด๋ค.
ํ์ ์ฑ์์ ธ ์๋ ์์ ํฉ์ ๊ตฌํ๋ ์ฐ์ฐ์ด ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ์ ํฌ๊ธฐ N๊ณผ ํฉ์ ๊ตฌํด์ผ ํ๋ ํ์ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ํ์ ์ฑ์์ ธ ์๋ ์๊ฐ 1ํ๋ถํฐ ์ฐจ๋ก๋๋ก ์ฃผ์ด์ง๋ค. ๋ค์ M๊ฐ์ ์ค์๋ ๋ค ๊ฐ์ ์ ์ x1, y1, x2, y2 ๊ฐ ์ฃผ์ด์ง๋ฉฐ, (x1, y1)๋ถํฐ (x2, y2)์ ํฉ์ ๊ตฌํด ์ถ๋ ฅํด์ผ ํ๋ค. ํ์ ์ฑ์์ ธ ์๋ ์๋ 1,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. (x1 ≤ x2, y1 ≤ y2)
์ถ๋ ฅ
์ด M์ค์ ๊ฑธ์ณ (x1, y1)๋ถํฐ (x2, y2)๊น์ง ํฉ์ ๊ตฌํด ์ถ๋ ฅํ๋ค.
ํ์ด
์๊ฐ์ ํ์ด ๋นก์ผ ๋ฌธ์ ๋ค.
์ถ์ ์๊ฐ ์๋ํ ๋์ ํฉ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ O(n)ํ์ด๋ฅผ ์งํํ๋๋ผ๋
sync_with_stdio ์ด๊ฑฐ ์์ฐ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค.
ios_base::sync_with_stdio(false);
cout.tie(NULL);
cin.tie(NULL);
์ฝ๋
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cout.tie(NULL);
cin.tie(NULL);
int n, m;
cin >> n >> m;
vector<vector<int>> v(n+1, vector<int>(n+1));
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
cin >> v[i][j];
}
}
// ๊ตฌ๊ฐํฉ ๊ตฌํ๊ธฐ
vector<vector<int>> sum(n+1, vector<int>(n+1));
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
sum[i][j] = sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1] + v[i][j];
}
}
int x1, y1, x2, y2;
while(m--) {
cin >> x1 >> y1 >> x2 >> y2;
int partial = sum[x2][y2] - sum[x1-1][y2] - sum[x2][y1-1] + sum[x1-1][y1-1];
cout << partial << "\n";
}
return 0;
}
'๐๏ธ ICPC Sinchon > Prefix Sum' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 14246๋ฒ : K๋ณด๋ค ํฐ ๊ตฌ๊ฐ (0) | 2024.08.08 |
---|---|
[C++][BOJ] ๋ฐฑ์ค 2167๋ฒ: 2์ฐจ์ ๋ฐฐ์ด์ ํฉ (0) | 2024.08.08 |