본문 바로가기

백준

11660 구간 합 구하기 5

 

오 전에 풀었던 거.. 기억난다

인덱스 조금 헷갈려

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()

using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;
using iii = tuple<int, int, int>;

i64 mapv[1030][1030];

int     main()
{
	int n, m;
	scanf("%d %d", &n, &m);

	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++)
			scanf("%lld", &mapv[i][j]);

	for (int i = 1; i <= n; i++)
		for (int j = 2; j <= n; j++)
			mapv[j][i] += mapv[j-1][i];

	for (int i = 1; i <= n; i++)
		for (int j = 2; j <= n; j++)
			mapv[i][j] += mapv[i][j - 1];

	for (int i = 0; i < m; i++)
	{
		int x1, y1, x2, y2;
		scanf("%d %d %d %d", &x1, &y1, &x2, &y2);

		i64 sum = 0;
		sum += mapv[x2][y2];
		sum -= mapv[x1 - 1][y2];
		sum -= mapv[x2][y1 - 1];
		sum += mapv[x1 - 1][y1 - 1];

		printf("%lld\n", sum);
	}

	return 0;
}

 

작년에 어떻게 풀었는지 궁금해서 찾아봤는데 엄청나네;

 

 

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    vector<vector <int>> v(n+1, vector<int>(n+1, 0));
    
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            scanf("%d", &v[i][j]);
            v[i][j] += v[i-1][j] + v[i][j-1] - v[i-1][j-1];
        }
    }
    
    for(int i = 0; i < m; i++){
        int x1, y1, x2, y2;
        scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
        printf("%d\n", v[x2][y2] -v[x1-1][y2] -v[x2][y1-1] + v[x1-1][y1-1]);
    }

    
    return 0;
}

입력 바로 받아버리네 와우

 

 

 

 

 

 

'백준' 카테고리의 다른 글

1927 최소 힙  (0) 2020.12.05
2607 비슷한 단어  (0) 2020.12.01
20127 Y-수열  (0) 2020.11.24
10816 숫자 카드 2  (0) 2020.11.10
14729 칠무해  (0) 2020.11.10