#include "fish.h"
#include <bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define all(a) (a).begin(), (a).end()
#define ll long long
template<typename T>
int len(T &a){
return a.size();
}
mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
struct SegmentTree{
//To change
struct Node{
//defaults
ll mn = 0, add = 0; bool marked = false;
void apply(ll val){
mn += val;
add += val;
marked = true;
}
};
void push(int x){
if(t[x].marked){
t[x << 1].apply(t[x].add);
t[x << 1 | 1].apply(t[x].add);
t[x].add = 0; t[x].marked = false;
}
}
Node merge(Node a, Node b){
Node res;
if(a.mn > b.mn){
res.mn = a.mn;
}else{
res.mn = b.mn;
}
return res;
}
Node neutral;
vector<Node> t;
int n;
//construction
void init(int _n){
n = _n;
t.assign(4 * n, neutral);
}
void build(vector<int> &a, int x, int lx, int rx){
if(lx == rx){
t[x].mn = a[lx];
return;
}
int mx = (lx + rx) >> 1;
build(a, x << 1, lx, mx);
build(a, x << 1 | 1, mx + 1, rx);
t[x] = merge(t[x << 1], t[x << 1 | 1]);
}
void upd(int x, int lx, int rx, int l, int r, int val){
if(rx < l || r < lx) return;
if(l <= lx && rx <= r){
t[x].apply(val); return;
}
push(x);
int mx = (lx + rx) >> 1;
upd(x << 1, lx, mx, l, r, val);
upd(x << 1 | 1, mx + 1, rx, l, r, val);
t[x] = merge(t[x << 1], t[x << 1 | 1]);
}
Node get(int x, int lx, int rx, int l, int r){
if(rx < l || r < lx){
return neutral;
}
if(l <= lx && rx <= r){
return t[x];
}
push(x);
int mx = (lx + rx) >> 1;
return merge(get(x << 1, lx, mx, l, r), get(x << 1 | 1, mx + 1, rx, l, r));
}
// lessen
void build(vector<int> &a){
int sz = len(a);
init(sz);
build(a, 1, 0, n - 1);
}
void upd(int l, int r, int val){
upd(1, 0, n - 1, l, r, val);
}
Node get(int l, int r){
return get(1, 0, n - 1, l, r);
}
};
long long max_weights(int n, int m, std::vector<int> x, std::vector<int> y,
std::vector<int> w) {
vector<vector<ll>> s(n, vector<ll>(n + 1));
for(int i = 0; i < m; i ++) s[x[i]][y[i] + 1] = w[i];
for(int i = 0; i < n; i ++){
for(int j = 1; j <= n; j ++) s[i][j] += s[i][j - 1];//, cout << s[i][j]<< ' ';
// cout << endl;
}
vector dp(n + 1, vector(n + 1, 0ll));
for(int i = 0; i <= n; i ++){
for(int j = 0; j <= i; j ++){
dp[i][j] = s[1][i] - s[1][j];
}
for(int j = i + 1; j <= n; j ++){
dp[i][j] = s[0][j] - s[0][i];
}
}
for(int c = 2; c < n; c ++){
vector tdp(n + 1, vector(n + 1, 0ll));
for(int i = 0; i <= n; i ++){
ll mx = 0;
for(int j = 0; j <= n; j ++){
mx = max(mx, dp[j][i]);
}
for(int j = 0; j <= i; j ++){
tdp[i][j] = s[c][i] - s[c][j] + mx;
}
for(int j = i + 1; j <= n; j ++){
for(int k = 0; k <= i; k ++){
tdp[i][j] = max(tdp[i][j], dp[k][i] + s[c - 1][j] - s[c - 1][i]);
}
for(int k = i + 1; k < j; k ++){
tdp[i][j] = max(tdp[i][j], dp[k][i] + s[c - 1][j] - s[c - 1][k]);
}
for(int k = j; k <= n; k ++){
tdp[i][j] = max(tdp[i][j], dp[k][i]);
}
}
}
swap(tdp, dp);
}
ll ans = 0;
for(int i = 0; i <= n; i ++){
ans = max(ans, *max_element(all(dp[i])));
}
return ans;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1103 ms |
2010008 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Runtime error |
814 ms |
2097152 KB |
Execution killed with signal 9 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
752 ms |
2097152 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
1 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
352 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
604 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Correct |
215 ms |
1024 KB |
Output is correct |
10 |
Execution timed out |
1076 ms |
2888 KB |
Time limit exceeded |
11 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
1 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
352 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
604 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Correct |
215 ms |
1024 KB |
Output is correct |
10 |
Execution timed out |
1076 ms |
2888 KB |
Time limit exceeded |
11 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
1 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
352 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
604 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Correct |
215 ms |
1024 KB |
Output is correct |
10 |
Execution timed out |
1076 ms |
2888 KB |
Time limit exceeded |
11 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
752 ms |
2097152 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1103 ms |
2010008 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |