#include<bits/stdc++.h>
using namespace std;
#define IOS cin.tie(nullptr)->sync_with_stdio(0),cin.exceptions(cin.failbit);
#define lb(x) (x)&-(x)
#define all(x) (x).begin(),(x).end()
#define ll long long
constexpr int maxN=1e6+5;
int n,m;
ll a[maxN],b[maxN],s[maxN],t[maxN],p[maxN],q[maxN],ans;
vector<pair<ll,int>> opt[maxN];
set<pair<int,ll>> dp;
int main(){
IOS
cin>>n>>m;
for(int i = 1;i<=n;i++)cin>>a[i]>>s[i]>>p[i],a[i]+=a[i-1];
for(int i = 1;i<=m;i++)cin>>b[i]>>t[i]>>q[i],b[i]+=b[i-1];
for(int i = 1;i<=n;i++)if(a[i]<=s[i]){
int tar = upper_bound(b,b+m+1,s[i]-a[i])-b;
ans+=p[i];
opt[i].emplace_back(-p[i],tar);
}
for(int i = 1;i<=m;i++)if(b[i]<=t[i]){
int tar = upper_bound(a,a+n+1,t[i]-b[i])-a;
if(tar==n+1)ans+=q[i];
else opt[tar].emplace_back(q[i],i);
}
dp.emplace(m+1,1e18);
for(int i = 1;i<=n;i++){
sort(all(opt[i]),[&](auto a,auto b){return a.first>b.first;});
for(auto [val,idx]:opt[i]){
for(auto it = dp.lower_bound(pair<int,ll>(idx,0));val<0;it = dp.erase(it))
val += it->second,idx = it->first;
dp.emplace(idx,val);
}
}
for(;dp.size()>1;dp.erase(dp.begin()))ans+=dp.begin()->second;
cout<<ans<<'\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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |