이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef pair<int, int> ii;
typedef long long ll;
typedef pair<ll, ll> pll;
const int len = 2e5+5;
pair<ii, ii> arr[len];
vector<vector<pll> > lazy;
vector<vector<ll> > pref;
int n, m, k;
void solve(){
int temp = 0;
if (n > m)
temp = 1;
if (temp){
for (int i = 0; i < k; i++)
swap(arr[i].fi.fi, arr[i].fi.se);
swap(n, m);
}
lazy.resize(n+1);
for (int i = 0; i <= n; i++)
lazy[i].resize(m+1, mp(0, 0));
for (int i = 0; i < k; i++){
int r = arr[i].fi.fi, c = arr[i].fi.se;
int a = arr[i].se.fi, b = arr[i].se.se;
int s = a/b;
//printf("i = %d, (r, c) = (%d, %d), (a, b) = (%d, %d)\n", i, r, c, a, b);
//printf("s = %d\n", s);
for (int x = max(1, r-s); x <= min(n, r+s); x++){
int d = abs(x-r);
//printf("x = %d, d = %d\n", x, d);
lazy[x][max(1, c-s)].fi += b;
lazy[x][max(1, c-s)].se += a-c*1LL*b;
lazy[x][max(1, c-d)].fi += 0 - (b);
lazy[x][max(1, c-d)].se += a-abs(r-x)*1LL*b - (a-c*1LL*b);
if (c+d >= m)
continue;
lazy[x][c+d].fi += -b;
lazy[x][c+d].se += a+c*1LL*b - (a-abs(r-x)*1LL*b);
if (c+s >= m)
continue;
lazy[x][c+s+1].fi += -(-b);
lazy[x][c+s+1].se += -(a+c*1LL*b);
}
}
for (int i = 1; i <= n; i++){
ll a = 0, b = 0;
for (int j = 1; j <= m; j++){
a += lazy[i][j].fi;
b += lazy[i][j].se;
if (!temp)
pref[i][j] = (a*1LL*j+b);
else
pref[j][i] = (a*1LL*j+b);
//printf("i = %d, j = %d, a = %lld, b = %lld\n", i, j, a, b);
//printf("%lld ", a*1LL*j+b);
}
//printf("\n");
}
if (temp){
swap(n, m);
}
}
int main(){
scanf("%d %d %d", &m, &n, &k);
for (int i = 0; i < k; i++)
scanf("%d %d %d %d", &arr[i].fi.se, &arr[i].fi.fi, &arr[i].se.fi, &arr[i].se.se);
pref.resize(n+1);
for (int i = 0; i <= n; i++)
pref[i].resize(m+1, 0);
solve();
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
pref[i][j] += pref[i-1][j]+pref[i][j-1]-pref[i-1][j-1];
int q;
scanf("%d", &q);
for (int i = 0; i < q; i++){
int x1, y1, x2, y2;
scanf("%d %d %d %d", &y1, &x1, &y2, &x2);
ll sum = (pref[x2][y2]-pref[x1-1][y2]-pref[x2][y1-1]+pref[x1-1][y1-1]);
ll many = (x2-x1+1)*1LL*(y2-y1+1);
ll ans = sum/many;
if ((sum%many)*2 >= many)
ans++;
printf("%lld\n", ans);
}
return 0;
}
/*
4 5 1
3 2 9 1
*/
컴파일 시 표준 에러 (stderr) 메시지
nuclearia.cpp: In function 'int main()':
nuclearia.cpp:88:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d %d", &m, &n, &k);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
nuclearia.cpp:90:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d %d %d", &arr[i].fi.se, &arr[i].fi.fi, &arr[i].se.fi, &arr[i].se.se);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nuclearia.cpp:103:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &q);
~~~~~^~~~~~~~~~
nuclearia.cpp:106:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d %d %d", &y1, &x1, &y2, &x2);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | 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... |