Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- int** precomputeMatrix(int** matrix, int n, int m)
- {
- int** sumMatrix = new int*[n];
- for(int i = 0;i<n;i++)
- sumMatrix[i] = new int[m];
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++)
- {
- if (i == 0 && j == 0)
- { // первая ячейка
- sumMatrix[i][j] = matrix[i][j];
- }
- else if (j == 0)
- { // ячейка в первой колонке
- sumMatrix[i][j] = sumMatrix[i-1][j] + matrix[i][j];
- } else if (i == 0)
- { // ячейка в первом ряду
- sumMatrix[i][j] = sumMatrix[i][j-1] + matrix[i][j];
- } else
- {
- sumMatrix[i][j] = sumMatrix[i-1][j] +
- sumMatrix[i][j-1] - sumMatrix[i-1][j-1] +
- matrix[i][j];
- }
- }
- }
- return sumMatrix;
- }
- int computeSum(int** sumMatrix, int i1, int i2, int j1, int j2) {
- if (i1 == 0 && j1 == 0)
- { // начинаем с ряда 0, колонки 0
- return sumMatrix[i2][j2];
- }
- else if (i1 == 0)
- { // начинаем с ряда 0
- return sumMatrix[i2][j2] - sumMatrix[i2][j1-1];
- }
- else if (j1 == 0)
- { // начинаем с колонки 0
- return sumMatrix[i2][j2] - sumMatrix[i1-1][j2];
- }
- else
- {
- return sumMatrix[i2][j2] - sumMatrix[i2][j1-1] - sumMatrix[i1-1][j2] + sumMatrix[i1-1][j1-1];
- }
- }
- int main()
- {
- setlocale(0,"Russian");
- ifstream InputFile("input.txt");
- ofstream OutputFile("output.txt");
- int m, n;
- InputFile >> n;
- InputFile >> m;
- int ** a = new int*[n];
- for (int i=0;i<n;i++)
- a[i]= new int[m];
- for(int i=0;i<n;i++)
- for(int j=0;j<m;j++)
- InputFile >> a[i][j];
- int** matrix = precomputeMatrix(a, n, m);
- int q;
- InputFile >> q;
- int lx, ly, rx, ry;
- int sum;
- for(int k=0; k<q; k++)
- {
- InputFile >> lx;
- InputFile >> ly;
- InputFile >> rx;
- InputFile >> ry;
- sum = computeSum(matrix, lx-1, rx-1, ly-1, ry-1);
- OutputFile << sum << endl;
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment