➤ Problem Link : 822C. Hacker, pack your bags!
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; #define ll long long int struct voucher { ll l,r,cost; ll suff,pre; }; bool comp(voucher a, voucher b) { if(a.l != b.l) return a.l < b.l; else return a.r < b.r ; } int main() { int n,x; cin>>n>>x; ll li,ri,ci; voucher v; map<ll,vector<voucher> > mp; for(int i=0;i<n;i++) { cin>>li>>ri>>ci; v.l=li; v.r=ri; v.cost=ci; mp[ri-li+1].push_back(v); } ll low,mid,high; ll ans=1000000000001; for(auto it = mp.begin();it!=mp.end() ; it++) { // cout<<it->first<<" "; ll d = x - it->first; if(mp.find(d)==mp.end()) continue; sort(mp[d].begin(),mp[d].end(),comp); ll ssum=1000000000001,psum=1000000000001; for(ll i=mp[d].size()-1;i>=0;i--) { if(mp[d][i].cost < ssum) ssum = mp[d][i].cost; mp[d][i].suff = ssum; } /* for(ll i=0;i<mp[d].size()-1;i++) { if(mp[d][i].cost < psum) psum = mp[d][i].cost; mp[d][i].pre = psum; }*/ for(int i=0;i<it->second.size();i++) { low=0,high = mp[d].size(); ll cl = (it->second)[i].l; ll cr = (it->second)[i].r; // cout<<cl<<" "<<cr<<endl; while(low<high) { mid=low+(high-low)/2; if(mp[d][mid].l > cr) high = mid; else low = mid+1; } if(low!=mp[d].size()) ans=min(ans,mp[d][low].suff+(it->second)[i].cost); } } if(ans==1000000000001) cout<<"-1"; else cout<<ans; }
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!