#include <bits/stdc++.h>
#ifdef local
#define safe std::cerr<<__PRETTY_FUNCTION__<<" line "<<__LINE__<<" safe\n"
#define debug(a...) qqbx(#a, a)
template <typename ...T> void qqbx(const char *s, T ...a) {
int cnt = sizeof...(T);
((std::cerr << "(" << s << ") = (") , ... , (std::cerr << a << (--cnt ? ", " : ")\n")));
}
#else
#define debug(...) ((void)0)
#define safe ((void)0)
#endif // local
using namespace std;
const int maxn = 1000025;
template <typename T> using min_heap = priority_queue<T, vector<T>, greater<T>>;
struct Item {
int t;
int64_t ed;
int val;
} v[maxn], u[maxn];
int64_t sumv[maxn], sumu[maxn];
int posv[maxn], posu[maxn];
int64_t dp[maxn], dif[maxn], lim[maxn];
signed main() {
ios_base::sync_with_stdio(0), cin.tie(0);
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> v[i].t >> v[i].ed >> v[i].val;
for (int i = 1; i <= m; i++)
cin >> u[i].t >> u[i].ed >> u[i].val;
/*
// int T = time(0);
// debug(T);
// srand(T);
srand(230);
for (int i = 1; i <= n; i++)
v[i].t = rand() % 10000, v[i].ed = rand() % (10000 * i), v[i].val = rand() % 100 - 50;
for (int i = 1; i <= m; i++)
u[i].t = rand() % 10000, u[i].ed = rand() % (10000 * i), u[i].val = rand() % 100 - 50;
*/
for (int i = 1; i <= n; i++)
sumv[i] = sumv[i-1] + v[i].t;
for (int i = 1; i <= m; i++)
sumu[i] = sumu[i-1] + u[i].t;
for (int i = 1; i <= n; i++)
posv[i] = upper_bound(sumu, sumu+m+1, v[i].ed - sumv[i]) - sumu - 1;
for (int i = 1; i <= m; i++)
posu[i] = upper_bound(sumv, sumv+n+1, u[i].ed - sumu[i]) - sumv - 1;
for (int j = 1; j <= m; j++) dp[j] = dp[j-1] + (posu[j] >= 0 ? u[j].val : 0);
for (int j = 1; j <= m; j++) lim[j] = dif[j] = (posu[j] >= 0 ? u[j].val : 0);
/*
cerr << "posu:\t";
cerr << 0 << ' ';
for (int i = 1; i <= m; i++) cerr << posu[i] << ' ';
cerr << '\n';
cerr << "u.val:\t";
cerr << 0 << ' ';
for (int i = 1; i <= m; i++) cerr << u[i].val << ' ';
cerr << '\n';
*/
set<int> st;
min_heap<pair<int,int>> pq;
for (int j = 1; j <= m; j++) if (posu[j] >= 0) pq.emplace(posu[j], -j);
for (int j = 1; j <= m; j++)
debug(j, posu[j], u[j].val);
function<void(int,int,int64_t)> update = [&](int i, int j, int64_t val) {
if (j == m+1) return;
dif[j] -= val;
debug(i, j, val);
if (dif[j] <= lim[j]) {
int64_t c = lim[j] - dif[j];
dif[j] = lim[j];
st.erase(j);
auto it = st.lower_bound(j);
if (it != st.end() && c)
update(i, *it, c);
} else {
st.insert(j);
}
// int64_t c = max<int64_t>(0, (j != 0 && i <= posu[j] ? u[j].val : 0) - dif[j]);
};
for (int i = 1; i <= n; i++) {
while (!pq.empty() && i > pq.top().first) {
int j = -pq.top().second;
pq.pop();
lim[j] = 0;
if (dif[j] > lim[j]) {
st.insert(j);
} else {
debug(dif[j], lim[j]);
update(i, j, 0);
debug(dif[j], lim[j]);
}
}
if (posv[i] >= 0)
dif[0] += v[i].val, update(i, posv[i]+1, v[i].val);
for (int j = 0; j <= posv[i]; j++) dp[j] += v[i].val;
for (int j = 1; j <= m; j++) dp[j] = max(dp[j], dp[j-1] + (i <= posu[j] ? u[j].val : 0));
/*
cerr << posv[i] << ';' << v[i].val << ";\n";
for (int j = 0; j <= m; j++) cerr << (dp[j] - (j ? dp[j-1] : 0)) << ' ';
cerr << '\n';
for (int j = 0; j <= m; j++) cerr << dif[j] << ' ';
cerr << '\n';
for (int j = 0; j <= m; j++) cerr << lim[j] << ' ';
cerr << '\n';
for (int j = 0; j <= m; j++)
cerr << (i<=posu[j]?u[j].val:0)<<' ';
cerr<<'\n';
for (int j = 0; j <= m; j++) assert (dif[j] == dp[j] - (j ? dp[j-1] : 0));
*/
}
debug(dp[m]);
int64_t sum = 0;
for (int i = 0; i <= m; i++) sum += dif[i];
cout << sum << '\n';
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
10072 ms |
26964 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
1 ms |
332 KB |
Output is correct |
3 |
Correct |
1 ms |
320 KB |
Output is correct |
4 |
Correct |
1 ms |
332 KB |
Output is correct |
5 |
Correct |
1 ms |
332 KB |
Output is correct |
6 |
Correct |
1 ms |
324 KB |
Output is correct |
7 |
Correct |
1 ms |
332 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
1 ms |
332 KB |
Output is correct |
10 |
Correct |
1 ms |
332 KB |
Output is correct |
11 |
Correct |
1 ms |
332 KB |
Output is correct |
12 |
Correct |
1 ms |
332 KB |
Output is correct |
13 |
Correct |
1 ms |
332 KB |
Output is correct |
14 |
Correct |
1 ms |
332 KB |
Output is correct |
15 |
Correct |
1 ms |
320 KB |
Output is correct |
16 |
Correct |
1 ms |
332 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
1 ms |
332 KB |
Output is correct |
3 |
Correct |
1 ms |
320 KB |
Output is correct |
4 |
Correct |
1 ms |
332 KB |
Output is correct |
5 |
Correct |
1 ms |
332 KB |
Output is correct |
6 |
Correct |
1 ms |
324 KB |
Output is correct |
7 |
Correct |
1 ms |
332 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
1 ms |
332 KB |
Output is correct |
10 |
Correct |
1 ms |
332 KB |
Output is correct |
11 |
Correct |
1 ms |
332 KB |
Output is correct |
12 |
Correct |
1 ms |
332 KB |
Output is correct |
13 |
Correct |
1 ms |
332 KB |
Output is correct |
14 |
Correct |
1 ms |
332 KB |
Output is correct |
15 |
Correct |
1 ms |
320 KB |
Output is correct |
16 |
Correct |
1 ms |
332 KB |
Output is correct |
17 |
Correct |
19 ms |
588 KB |
Output is correct |
18 |
Correct |
20 ms |
716 KB |
Output is correct |
19 |
Correct |
24 ms |
588 KB |
Output is correct |
20 |
Correct |
18 ms |
588 KB |
Output is correct |
21 |
Correct |
21 ms |
708 KB |
Output is correct |
22 |
Correct |
20 ms |
636 KB |
Output is correct |
23 |
Correct |
20 ms |
588 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
1 ms |
332 KB |
Output is correct |
3 |
Correct |
1 ms |
320 KB |
Output is correct |
4 |
Correct |
1 ms |
332 KB |
Output is correct |
5 |
Correct |
1 ms |
332 KB |
Output is correct |
6 |
Correct |
1 ms |
324 KB |
Output is correct |
7 |
Correct |
1 ms |
332 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
1 ms |
332 KB |
Output is correct |
10 |
Correct |
1 ms |
332 KB |
Output is correct |
11 |
Correct |
1 ms |
332 KB |
Output is correct |
12 |
Correct |
1 ms |
332 KB |
Output is correct |
13 |
Correct |
1 ms |
332 KB |
Output is correct |
14 |
Correct |
1 ms |
332 KB |
Output is correct |
15 |
Correct |
1 ms |
320 KB |
Output is correct |
16 |
Correct |
1 ms |
332 KB |
Output is correct |
17 |
Correct |
19 ms |
588 KB |
Output is correct |
18 |
Correct |
20 ms |
716 KB |
Output is correct |
19 |
Correct |
24 ms |
588 KB |
Output is correct |
20 |
Correct |
18 ms |
588 KB |
Output is correct |
21 |
Correct |
21 ms |
708 KB |
Output is correct |
22 |
Correct |
20 ms |
636 KB |
Output is correct |
23 |
Correct |
20 ms |
588 KB |
Output is correct |
24 |
Execution timed out |
10091 ms |
25956 KB |
Time limit exceeded |
25 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
1 ms |
332 KB |
Output is correct |
3 |
Correct |
1 ms |
320 KB |
Output is correct |
4 |
Correct |
1 ms |
332 KB |
Output is correct |
5 |
Correct |
1 ms |
332 KB |
Output is correct |
6 |
Correct |
1 ms |
324 KB |
Output is correct |
7 |
Correct |
1 ms |
332 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
1 ms |
332 KB |
Output is correct |
10 |
Correct |
1 ms |
332 KB |
Output is correct |
11 |
Correct |
1 ms |
332 KB |
Output is correct |
12 |
Correct |
1 ms |
332 KB |
Output is correct |
13 |
Correct |
1 ms |
332 KB |
Output is correct |
14 |
Correct |
1 ms |
332 KB |
Output is correct |
15 |
Correct |
1 ms |
320 KB |
Output is correct |
16 |
Correct |
1 ms |
332 KB |
Output is correct |
17 |
Correct |
19 ms |
588 KB |
Output is correct |
18 |
Correct |
20 ms |
716 KB |
Output is correct |
19 |
Correct |
24 ms |
588 KB |
Output is correct |
20 |
Correct |
18 ms |
588 KB |
Output is correct |
21 |
Correct |
21 ms |
708 KB |
Output is correct |
22 |
Correct |
20 ms |
636 KB |
Output is correct |
23 |
Correct |
20 ms |
588 KB |
Output is correct |
24 |
Execution timed out |
10091 ms |
25956 KB |
Time limit exceeded |
25 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
1 ms |
332 KB |
Output is correct |
3 |
Correct |
1 ms |
320 KB |
Output is correct |
4 |
Correct |
1 ms |
332 KB |
Output is correct |
5 |
Correct |
1 ms |
332 KB |
Output is correct |
6 |
Correct |
1 ms |
324 KB |
Output is correct |
7 |
Correct |
1 ms |
332 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
1 ms |
332 KB |
Output is correct |
10 |
Correct |
1 ms |
332 KB |
Output is correct |
11 |
Correct |
1 ms |
332 KB |
Output is correct |
12 |
Correct |
1 ms |
332 KB |
Output is correct |
13 |
Correct |
1 ms |
332 KB |
Output is correct |
14 |
Correct |
1 ms |
332 KB |
Output is correct |
15 |
Correct |
1 ms |
320 KB |
Output is correct |
16 |
Correct |
1 ms |
332 KB |
Output is correct |
17 |
Correct |
19 ms |
588 KB |
Output is correct |
18 |
Correct |
20 ms |
716 KB |
Output is correct |
19 |
Correct |
24 ms |
588 KB |
Output is correct |
20 |
Correct |
18 ms |
588 KB |
Output is correct |
21 |
Correct |
21 ms |
708 KB |
Output is correct |
22 |
Correct |
20 ms |
636 KB |
Output is correct |
23 |
Correct |
20 ms |
588 KB |
Output is correct |
24 |
Execution timed out |
10091 ms |
25956 KB |
Time limit exceeded |
25 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
10072 ms |
26964 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
10072 ms |
26964 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |