#include<bits/stdc++.h>
#define x first
#define y second
#define pb push_back
#define eb emplace_back
#define all(a) (a).begin(),(a).end()
#define SZ(a) (int)(a).size()
#define FOR(i, a, b) for(int i=(a); i<=(b); ++i)
#define iFOR(i, a, b) for(int i=(a); i>=(b); --i)
#define make_unique(a) sort(all((a))), (a).resize(unique(all((a)))-(a).begin())
using namespace std;
typedef pair<int,int> PII;
typedef long long LL;
typedef double DD;
typedef long double LD;
typedef pair<LL,LL> PLL;
typedef pair<DD,DD> PDD;
typedef vector<int> VI;
typedef vector<LL> VL;
const LL inf = 1e18;
const int N = 1000005;
LL n;
LL seg[N<<2], lazy[N<<2], label[N<<2];
LL fastMax(LL x, LL y) { return (((y-x)>>(63))&(x^y))^y; }
int fastMin(int x, int y) { return (((y-x)>>(31))&(x^y))^x; }
void push_add(int l, int r, int nw){
seg[nw] += lazy[nw];
if(l != r){
lazy[nw<<1] += lazy[nw], lazy[nw<<1|1] += lazy[nw];
}
lazy[nw] = 0;
}
void push_label(int l, int r, int nw){
seg[nw] = label[nw];
if(l != r){
lazy[nw<<1] = lazy[nw<<1|1] = 0;
label[nw<<1] = label[nw<<1|1] = label[nw];
}
label[nw] = inf;
}
void paste(int ll, int rr, LL v, int l = 0, int r = n, int nw = 1){
if(label[nw] != inf) push_label(l, r, nw);
if(lazy[nw] != 0) push_add(l, r, nw);
if(ll > rr || l > rr || r < ll) return ;
if(l >= ll && r <= rr){
label[nw] = v;
push_label(l, r, nw);
return ;
}
int m = (l+r)>>1;
paste(ll, rr, v, l, m, nw<<1);
paste(ll, rr, v, m+1, r, nw<<1|1);
seg[nw] = fastMax(seg[nw<<1], seg[nw<<1|1]);
}
void add(int ll, int rr, LL v, int l = 0, int r = n, int nw = 1){
if(label[nw] != inf) push_label(l, r, nw);
if(lazy[nw] != 0) push_add(l, r, nw);
if(l > r || ll > rr || l > rr || r < ll) return ;
if(l >= ll && r <= rr){
lazy[nw] = v;
push_add(l, r, nw);
return ;
}
int m = (l+r)>>1;
add(ll, rr, v, l, m, nw<<1);
add(ll, rr, v, m+1, r, nw<<1|1);
seg[nw] = fastMax(seg[nw<<1], seg[nw<<1|1]);
}
int search(int ll, int rr, LL v, int l = 0, int r = n, int nw = 1){
if(label[nw] != inf) push_label(l, r, nw);
if(lazy[nw] != 0) push_add(l, r, nw);
if(l > rr || r < ll) return rr+1;
if(l == r){
if(seg[nw] >= v) return l;
return rr+1;
}
int m = (l+r)>>1;
if(l >= ll && r <= rr){
if(label[nw<<1] != inf) push_label(l, m, nw<<1);
if(lazy[nw<<1] != 0) push_add(l, m, nw<<1);
if(seg[nw<<1] >= v) return search(ll, rr, v, l, m, nw<<1);
return search(ll, rr, v, m+1, r, nw<<1|1);
}
return fastMin( search(ll, rr, v, l, m, nw<<1), search(ll, rr, v, m+1, r, nw<<1|1));
}
LL get(int idx, int l = 0, int r = n, int nw = 1){
if(label[nw] != inf) push_label(l, r, nw);
if(lazy[nw] != 0) push_add(l, r, nw);
if(l == r) return seg[nw];
int m = (l+r)>>1;
if(idx <= m) return get(idx, l, m, nw<<1);
return get(idx, m+1, r, nw<<1|1);
}
LL A[N], B[N];
LL S[N], T[N];
LL P[N], Q[N];
vector< PLL > sweep[N];
LL m;
void fastscan(LL &x)
{
bool neg=false;
register LL c;
c=getchar();
if(c=='-')
{
neg = true;
c=getchar();
}
for(;(c>47 && c<58);c=getchar())
x = (x<<1) + (x<<3) +c -48;
if(neg)
x *=-1;
}
void evaluate(PLL a, PLL b){
int now = a.x;
LL upd = a.y;
int nxt = b.x;
add(now+1, n, upd);
// printf("##"); seg.print(); puts("");
if(now == nxt) return ;
LL value = get(now);
int stop_point = search(now+1, nxt, value)-1;
//printf("j %d (%d, %d) %lld stop = %d\n",j,now,nxt,value,stop_point);
if(stop_point > now) paste(now+1, stop_point, value);
}
int main(){
fastscan(n); fastscan(m);
FOR(i, 1, n) fastscan(A[i]), fastscan(S[i]), fastscan(P[i]), A[i] += A[i-1];
FOR(i, 1, m) fastscan(B[i]), fastscan(T[i]), fastscan(Q[i]), B[i] += B[i-1];
FOR(i, 1, (n+1)<<2) label[i] = inf;
FOR(i, 1, n){
int pA = upper_bound(B, B+1+m, S[i]-A[i]) - B - 1;
if(pA == -1) continue;
sweep[pA+1].pb(PLL(i-1, P[i]));
}
//seg.print(); puts("");
FOR(i, 1, m){
int pB = upper_bound(A, A+1+n, T[i]-B[i]) - A - 1;
int ch = 0;
if(pB != -1) add(0, pB, Q[i]), ch = 1;
//printf("#"); seg.print(); puts("");
sweep[i].pb( PLL(n, 0) );
//printf("sweep: "); for(PLL e : sweep[i]) printf("(%lld, %lld) ",e.x,e.y);
//puts("");
FOR(j, 0, SZ(sweep[i])-2){
if(ch && sweep[i][j].x < pB && pB < sweep[i][j+1].x){
evaluate(sweep[i][j], PLL(pB, 0));
evaluate(PLL(pB, 0), sweep[i][j+1]);
ch = 0;
}else{
evaluate(sweep[i][j], sweep[i][j+1]);
}
}
sweep[i].clear();
//seg.print(); puts("");
}
//puts("");
for(PLL e : sweep[m+1]) add(e.x+1, n, e.y);
printf("%lld",get(n));
return 0;
}
/*
*
*
*
*
*
*
*
*
*
*
*/
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
592 ms |
62712 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
19 ms |
23936 KB |
Output is correct |
2 |
Correct |
19 ms |
23936 KB |
Output is correct |
3 |
Correct |
24 ms |
23936 KB |
Output is correct |
4 |
Correct |
26 ms |
23808 KB |
Output is correct |
5 |
Incorrect |
22 ms |
23936 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
19 ms |
23936 KB |
Output is correct |
2 |
Correct |
19 ms |
23936 KB |
Output is correct |
3 |
Correct |
24 ms |
23936 KB |
Output is correct |
4 |
Correct |
26 ms |
23808 KB |
Output is correct |
5 |
Incorrect |
22 ms |
23936 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
19 ms |
23936 KB |
Output is correct |
2 |
Correct |
19 ms |
23936 KB |
Output is correct |
3 |
Correct |
24 ms |
23936 KB |
Output is correct |
4 |
Correct |
26 ms |
23808 KB |
Output is correct |
5 |
Incorrect |
22 ms |
23936 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
19 ms |
23936 KB |
Output is correct |
2 |
Correct |
19 ms |
23936 KB |
Output is correct |
3 |
Correct |
24 ms |
23936 KB |
Output is correct |
4 |
Correct |
26 ms |
23808 KB |
Output is correct |
5 |
Incorrect |
22 ms |
23936 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
19 ms |
23936 KB |
Output is correct |
2 |
Correct |
19 ms |
23936 KB |
Output is correct |
3 |
Correct |
24 ms |
23936 KB |
Output is correct |
4 |
Correct |
26 ms |
23808 KB |
Output is correct |
5 |
Incorrect |
22 ms |
23936 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
592 ms |
62712 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
592 ms |
62712 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |