# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
462297 | kingfran1907 | Nuclearia (CEOI15_nuclearia) | C++14 | 1094 ms | 186848 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define X first
#define Y second
using namespace std;
typedef long long llint;
const int maxn = 3e6+10;
const int base = 31337;
const int mod = 1e9+7;
const int inf = 0x3f3f3f3f;
const int logo = 18;
const int off = 1 << logo;
const int treesiz = off << 1;
int n, q;
int w, h;
vector< llint > niz[maxn];
vector< llint > pref[maxn];
llint ac[maxn];
llint pr[maxn];
int main() {
scanf("%d%d", &w, &h);
if (h == 1) {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int x, y;
llint a, b;
scanf("%d%d%lld%lld", &x, &y, &a, &b);
llint dis = a / b;
int l = max(1LL, x - dis);
int r = min((llint)w, x + dis);
pr[l - 1] += a - b * (x - l);
pr[l] -= a - b * (x - l);
pr[l] += b;
pr[x] -= b + b;
pr[r] -= a - b * (r - x);
pr[r] += b;
pr[r + 1] += a - b * (r - x);
}
llint tren = pr[0];
for (int i = 1; i <= w; i++) {
ac[i] = ac[i - 1] + tren;
tren += pr[i];
}
//for (int i = 1; i <= w; i++) printf("%lld ", ac[i]);
//printf("\n");
for (int i = 1; i <= w; i++) ac[i] += ac[i - 1];
scanf("%d", &q);
while (q--) {
int x1, y1, x2, y2;
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
llint sum = ac[x2] - ac[x1 - 1];
llint cnt = x2 - x1 + 1;
llint sol = sum / cnt;
llint rem = sum % cnt;
if (rem * 2 >= cnt) printf("%lld\n", sol + 1);
else printf("%lld\n", sol);
}
return 0;
}
for (int i = 0; i < w; i++)
for (int j = 0; j < h; j++)
niz[i].push_back(0);
scanf("%d", &n);
while (n--) {
int x, y;
llint a, b;
scanf("%d%d%lld%lld", &x, &y, &a, &b); x--, y--;
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++) {
int dis = max(abs(i - x), abs(j - y));
llint kol = max(0LL, a - b * dis);
niz[i][j] += kol;
}
}
}
for (int i = 0; i <= w; i++) {
for (int j = 0; j <= h; j++) {
pref[i].push_back(0);
}
}
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++) {
pref[i + 1][j + 1] = niz[i][j];
pref[i + 1][j + 1] += pref[i + 1][j];
}
}
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++) {
pref[i + 1][j + 1] += pref[i][j + 1];
}
}
scanf("%d", &q);
while (q--) {
int x1, y1, x2, y2;
scanf("%d%d%d%d", &x1, &y1, &x2, &y2); x1--, y1--;
llint sum = pref[x2][y2] - pref[x1][y2] - pref[x2][y1] + pref[x1][y1];
llint cnt = (llint)(x2 - x1) * (y2 - y1);
llint sol = sum / cnt;
llint rem = sum % cnt;
if (rem * 2 >= cnt) printf("%lld\n", sol + 1);
else printf("%lld\n", sol);
}
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |