Submission #1150795

#TimeUsernameProblemLanguageResultExecution timeMemory
1150795fatman87878Two Dishes (JOI19_dishes)C++20
74 / 100
1488 ms180568 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...