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>
using namespace std;
#define TRACE(x) cerr << #x << " :: " << x << endl
#define _ << " " <<
#define SZ(x) (int)(x).size()
#define ALL(x) (x).begin(),(x).end()
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define RFOR(i,a,b) for (int i=(a);i>=(b);--i)
typedef pair<int,int> ii;
const int mxN = 1505;
int N, A[mxN][mxN], B[mxN][mxN], up[mxN][mxN];
long long S;
int main() {
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> N;
FOR(i,1,N){
FOR(j,1,N){
cin >> A[i][j];
B[i][j] = max(B[i-1][j], B[i][j-1]) + A[i][j];
S += B[i][j];
}
}
cout << S << '\n';
FOR(i,1,N){
char op;
int r, c, v;
cin >> op >> r >> c;
v = (op == 'U' ? 1 : -1);
queue<ii> q;
A[r][c] += v;
B[r][c] += v;
S += v;
q.push(ii(r,c));
while (!q.empty()) {
auto u = q.front(); q.pop();
int dr[] = {0,1};
int dc[] = {1,0};
FOR(k,0,1){
int nr = u.first + dr[k], nc = u.second + dc[k];
if (nr <= N && nc <= N &&
max(B[nr-1][nc], B[nr][nc-1]) + A[nr][nc] != B[nr][nc]) {
B[nr][nc] += v;
S += v;
q.push(ii(nr,nc));
}
}
}
cout << S << '\n';
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |