#include <bits/stdc++.h>
using namespace std;
void OJize(){cin.tie(NULL);ios_base::sync_with_stdio(false);}
typedef long long ll;
const int IINF = 0x3f3f3f3f;
const ll LINF = 0x3f3f3f3f3f3f3f3f;
#define sz(X) (int)((X).size())
#define entire(X) X.begin(),X.end()
template <class T1, class T2>ostream&operator<<(ostream &os,pair<T1,T2>const&x){os<<'('<<x.first<<", "<<x.second<<')';return os;}
template <class Ch, class Tr, class Container>basic_ostream<Ch,Tr>&operator<<(basic_ostream<Ch,Tr>&os,Container const&x){os<<"[ ";for(auto&y:x)os<<y<<" ";return os<<"]";}
// NOTE: this is not a "sparse table" related to
// binary lifting, it's literally an array which is sparse!!
template<typename T>
struct SparseArray{
// not actually sparse yet!!
int n;
vector<T> arr, sum;
vector<bool> written;
vector<int> nonempty;
SparseArray(int N): n{N}, arr(N), sum(N), written(N){}
void write(int i, T x){arr[i] = x; written[i] = true;}
void init(){
sum[0] = arr[0];
for(int i=1; i<n; i++) sum[i] = sum[i-1]+arr[i];
for(int i=0; i<n; i++) if(written[i])
nonempty.push_back(i);
}
T operator[](int i){return arr[i];}
T prefsum(int i){return i>=0? sum[i] : (T)0;}
T getsum(int l, int r){return prefsum(r) - prefsum(l);}
T allmax(){
return *max_element(entire(arr));
}
};
ll max_weights(int L, int n,
vector<int> X, vector<int> Y, vector<int> W){
vector<SparseArray<ll>> grid(L, SparseArray<ll>(L+1));
for(int i=0; i<L; i++)
grid[i].write(0, 0), grid[i].write(L, 0);
for(int i=0; i<n; i++) grid[X[i]].write(Y[i], (ll)W[i]);
for(auto &A: grid) A.init();
SparseArray<ll> dinc(L+1), ddec(L+1);
dinc.init(); ddec.init();
// column _,
// last column height j,
// next will increase/decrease
for(int i=1; i<L; i++){
SparseArray<ll> ndinc(L+1), nddec(L+1);
for(int y: grid[i].nonempty){
ll incy = 0, decy = 0;
if(y == 0) incy = decy = ddec[0];
if(y == L) incy = decy = max(ddec[0], dinc[L]);
ll inc_base = grid[i-1].prefsum(y-1);
for(int y0: grid[i-1].nonempty) if(y0 < y){ // inc
// take [i-1][y0 to y-1]
ll val = inc_base + dinc[y0] - grid[i-1].prefsum(y0-1);
incy = max(incy, val);
if(y == L) decy = max(decy, val);
}
ll dec_base = -grid[i].prefsum(y-1);
for(int y0: grid[i-1].nonempty) if(y0 > y){ // dec
// take [i][y to y0-1]
ll val = dec_base + ddec[y0] + grid[i].prefsum(y0-1);
decy = max(decy, val);
}
ndinc.write(y, incy);
nddec.write(y, decy);
}
ndinc.init(); ddec.init();
dinc = ndinc, ddec = nddec;
}
return max(dinc.allmax(), ddec.allmax());
}
#ifdef jh
int main(){OJize();
int n; cin>>n;
vector<int> X, Y, W;
for(int i=0; i<n; i++) for(int j=0; j<n; j++){
int x; cin>>x;
if(x){
X.push_back(j);
Y.push_back(n-1-i);
W.push_back(x);
}
}
cout << max_weights(n, sz(X), X, Y, W);
}
#endif
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
748 ms |
2097152 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Runtime error |
761 ms |
2097152 KB |
Execution killed with signal 9 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
709 ms |
2097152 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
0 ms |
212 KB |
Output is correct |
7 |
Correct |
0 ms |
212 KB |
Output is correct |
8 |
Correct |
0 ms |
212 KB |
Output is correct |
9 |
Correct |
1 ms |
596 KB |
Output is correct |
10 |
Correct |
3 ms |
1748 KB |
Output is correct |
11 |
Correct |
1 ms |
596 KB |
Output is correct |
12 |
Correct |
4 ms |
1748 KB |
Output is correct |
13 |
Correct |
1 ms |
340 KB |
Output is correct |
14 |
Correct |
3 ms |
1748 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
0 ms |
212 KB |
Output is correct |
7 |
Correct |
0 ms |
212 KB |
Output is correct |
8 |
Correct |
0 ms |
212 KB |
Output is correct |
9 |
Correct |
1 ms |
596 KB |
Output is correct |
10 |
Correct |
3 ms |
1748 KB |
Output is correct |
11 |
Correct |
1 ms |
596 KB |
Output is correct |
12 |
Correct |
4 ms |
1748 KB |
Output is correct |
13 |
Correct |
1 ms |
340 KB |
Output is correct |
14 |
Correct |
3 ms |
1748 KB |
Output is correct |
15 |
Correct |
2 ms |
1748 KB |
Output is correct |
16 |
Correct |
2 ms |
468 KB |
Output is correct |
17 |
Correct |
45 ms |
3404 KB |
Output is correct |
18 |
Correct |
47 ms |
3528 KB |
Output is correct |
19 |
Correct |
34 ms |
3444 KB |
Output is correct |
20 |
Correct |
38 ms |
3532 KB |
Output is correct |
21 |
Correct |
33 ms |
3516 KB |
Output is correct |
22 |
Correct |
92 ms |
4888 KB |
Output is correct |
23 |
Correct |
7 ms |
2176 KB |
Output is correct |
24 |
Correct |
21 ms |
3072 KB |
Output is correct |
25 |
Correct |
3 ms |
1844 KB |
Output is correct |
26 |
Correct |
7 ms |
2132 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
0 ms |
212 KB |
Output is correct |
7 |
Correct |
0 ms |
212 KB |
Output is correct |
8 |
Correct |
0 ms |
212 KB |
Output is correct |
9 |
Correct |
1 ms |
596 KB |
Output is correct |
10 |
Correct |
3 ms |
1748 KB |
Output is correct |
11 |
Correct |
1 ms |
596 KB |
Output is correct |
12 |
Correct |
4 ms |
1748 KB |
Output is correct |
13 |
Correct |
1 ms |
340 KB |
Output is correct |
14 |
Correct |
3 ms |
1748 KB |
Output is correct |
15 |
Correct |
2 ms |
1748 KB |
Output is correct |
16 |
Correct |
2 ms |
468 KB |
Output is correct |
17 |
Correct |
45 ms |
3404 KB |
Output is correct |
18 |
Correct |
47 ms |
3528 KB |
Output is correct |
19 |
Correct |
34 ms |
3444 KB |
Output is correct |
20 |
Correct |
38 ms |
3532 KB |
Output is correct |
21 |
Correct |
33 ms |
3516 KB |
Output is correct |
22 |
Correct |
92 ms |
4888 KB |
Output is correct |
23 |
Correct |
7 ms |
2176 KB |
Output is correct |
24 |
Correct |
21 ms |
3072 KB |
Output is correct |
25 |
Correct |
3 ms |
1844 KB |
Output is correct |
26 |
Correct |
7 ms |
2132 KB |
Output is correct |
27 |
Correct |
177 ms |
143024 KB |
Output is correct |
28 |
Correct |
406 ms |
16408 KB |
Output is correct |
29 |
Execution timed out |
1085 ms |
152396 KB |
Time limit exceeded |
30 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
709 ms |
2097152 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
748 ms |
2097152 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |