int main() { ll n, m,q,a,b; scanf("%lld %lld", &n, &m); for(ll i = 1; i <= n; i++) for(ll j = 1; j <= m; j++) { scanf("%lld", &P[i][j]); sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+P[i][j]; } Tmax.init(n, m); scanf("%lld",&q); ll sol=0; ll sol2=0; ll temp=0; while(q--) { sol=0; temp=LONG_LONG_MAX; scanf("%lld %lld",&a,&b); for(ll i = 1; i <= n-a+1; i++) for(ll j = 1; j <= m-b+1; j++) { sol=Tmax.query(i,j,i+a-1,j+b-1).mx; sol2=sum[i+a-1][j+b-1]-sum[i+a-1][j-1]-sum[i-1][j+b-1]+sum[i-1][j-1]; temp=min(sol*(a*b)-sol2,temp); } printf("%lld\n",temp); } return 0; }
int main(void) { int T; cin >> T; for (int i = 1; i <= T; i++) { cout << "Case #" << i << ": "; int N, K, X, C; // input cin >> N >> K >> C >> X; vector<int> A(N), B(N); for (int i = 0; i < N; i++) cin >> A[i]; for (int i = 0; i < N; i++) cin >> B[i]; for(int i = 1; i <= N; i++) for(int j = 1; j <= N; j++) P[i][j] = (int) (((long long) A[i-1] * i + (long long) B[j-1] * j + C) % X); // initialize Tmax.init(N, N); long long sum = 0; for (int i = 1; i <= N; i++) for (int j = 1; j <= N; j++) { int ii = i + K - 1, jj = j + K - 1; if (ii <= N && jj <= N) sum += Tmax.query(i, j, ii, jj).mx; } cout << sum << endl; } return 0; }
/* Drier program */ int main(void) { int n, m; // input scanf("%d %d", &n, &m); for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) scanf("%d", &P[i][j]); // initialize Tmax.init(n, m); Tmin.init(n, m); // query int x1, y1, x2, y2; scanf("%d %d %d %d", &x1, &y1, &x2, &y2); Tmax.query(x1, y1, x2, y2).mx; Tmin.query(x1, y1, x2, y2).mx; // update int x, y, v; scanf("%d %d %d", &x, &y, &v); Tmax.update(x, y, v); Tmin.update(x, y, v); return 0; }
int main(void){ scanf("%d %d", &n, &m); int i1, i2, j1, j2, x, y, q, a1, a2, b1, b2; P = new int*[n]; sum = new int*[n]; for (int i = 0; i < n; i += 1){ P[i] = new int[m]; sum[i] = new int[m]; for (int j = 0;j < m; j += 1){ scanf("%d", &P[i][j]); } } // cout << "The matrix is filled" << endl; precompute_sum(); // precomputation of sum // cout << "Sum is precomputed" << endl; Tmax.init(n, m); // cout << "Tree is initialized " << endl; scanf("%d", &q); for (int i = 0; i < q; i += 1){ scanf("%d %d", &x, &y); printf("%d\n", ans(x, y)); } }
int ans(int x, int y){ int mintime = INF; for (int i = 0; i < n-x+1; i += 1){ for (int j = 0; j < m-y+1; j += 1){ int i1 = i, j1 = j, i2 = i+x-1, j2 = j+y-1; int maxelem = Tmax.query(i1,j1,i2,j2); int cursum = calculate_sum(i1,j1,i2,j2); // cout << "For bounds " << i1 << " " << j1 << " and " << i2 << " " << j2 << " max is " << maxelem << " and sum is " << cursum << endl; mintime = min(mintime, maxelem*x*y - cursum); } } return mintime; }