Submission #570290

#TimeUsernameProblemLanguageResultExecution timeMemory
570290600MihneaNuclearia (CEOI15_nuclearia)C++17
55 / 100
1098 ms257116 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; signed main() { ios::sync_with_stdio(0); cin.tie(0); ///freopen ("input.txt", "r", stdin); bool Inverse = 0; int n, m; cin >> n >> m; if (n > m) { Inverse = 1; swap(n, m); } assert(n <= m); vector<vector<ll>> deri(n + 2, vector<ll> (m + 2, 0)), jmen(n + 2, vector<ll> (m + 2, 0)), difs(n + 2, vector<ll> (m + 2, 0)), v(n + 2, vector<ll> (m + 2, 0)); function<void(int, int, int, int, int, int)> proc = [&] (int dist, int r, int c, int a, int b, int rect_dim) { int L = max(1, c - dist), R = min(m, c + dist); assert(dist + 1 <= rect_dim); if (dist + 1 <= min(rect_dim, m - c)) { L = c + dist + 1; R = min(c + rect_dim, m); assert(L <= R); jmen[r][L] += (a + 1LL * b * c); jmen[r][R + 1] -= (a + 1LL * b * c); difs[r][L] -= 1LL * b * L; deri[r][L + 1] -= b; deri[r][R + 1] += b; difs[r][R + 1] += 1LL * b * R; } if (dist + 1 <= min(rect_dim, c - 1)) { L = max(c - rect_dim, 1); R = c - dist - 1; assert(L <= R); jmen[r][L] += (a - 1LL * b * c); jmen[r][R + 1] -= (a - 1LL * b * c); difs[r][L] += 1LL * b * L; deri[r][L + 1] += b; deri[r][R + 1] -= b; difs[r][R + 1] -= 1LL * b * R; } }; int ops; cin >> ops; for (int i = 1; i <= ops; i++) { int r1, c, a, b, rect_dim; cin >> r1 >> c >> a >> b; if (Inverse) { swap(r1, c); } rect_dim = a / b; for (int dist = 0; (r1 + dist <= n || r1 - dist >= 1) && dist <= rect_dim - 1; dist++) { if (r1 + dist <= n) { int L = max(1, c - dist), R = min(m, c + dist); proc(dist, r1 + dist, c, a, b, rect_dim); } if (r1 - dist >= 1 && dist >= 1) { int L = max(1, c - dist), R = min(m, c + dist); proc(dist, r1 - dist, c, a, b, rect_dim); } } for (int dist = 0; (r1 + dist <= n || r1 - dist >= 1) && dist <= rect_dim; dist++) { if (r1 + dist <= n) { int L = max(1, c - dist), R = min(m, c + dist); jmen[r1 + dist][L] += (a - dist * b); jmen[r1 + dist][R + 1] -= (a - dist * b); } if (r1 - dist >= 1 && dist >= 1) { int L = max(1, c - dist), R = min(m, c + dist); jmen[r1 - dist][L] += (a - dist * b); jmen[r1 - dist][R + 1] -= (a - dist * b); } } } for (int r = 1; r <= n; r++) { for (int c = 1; c <= m; c++) { deri[r][c] += deri[r][c - 1]; difs[r][c] += deri[r][c]; difs[r][c] += difs[r][c - 1]; jmen[r][c] += jmen[r][c - 1]; v[r][c] += jmen[r][c]; v[r][c] += difs[r][c]; } } { for (int i = 1; i <= n; i++) { ll cur = 0; for (int j = 1; j <= m; j++) { cur += v[i][j]; v[i][j] = v[i - 1][j] + cur; } } } int q; cin >> q; while (q--) { int r1, c1, r2, c2; cin >> r1 >> c1 >> r2 >> c2; if (Inverse) { swap(r1, c1); swap(r2, c2); } ll total = v[r2][c2] - v[r1 - 1][c2] - v[r2][c1 - 1] + v[r1 - 1][c1 - 1]; ll area = (r2 - r1 + 1) * (c2 - c1 + 1); cout << total / area + (total % area >= area - total % area) << "\n"; } }

Compilation message (stderr)

nuclearia.cpp: In function 'int main()':
nuclearia.cpp:64:13: warning: unused variable 'L' [-Wunused-variable]
   64 |         int L = max(1, c - dist), R = min(m, c + dist);
      |             ^
nuclearia.cpp:64:35: warning: unused variable 'R' [-Wunused-variable]
   64 |         int L = max(1, c - dist), R = min(m, c + dist);
      |                                   ^
nuclearia.cpp:68:13: warning: unused variable 'L' [-Wunused-variable]
   68 |         int L = max(1, c - dist), R = min(m, c + dist);
      |             ^
nuclearia.cpp:68:35: warning: unused variable 'R' [-Wunused-variable]
   68 |         int L = max(1, c - dist), R = min(m, c + dist);
      |                                   ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...