Submission #419308

#TimeUsernameProblemLanguageResultExecution timeMemory
419308Runtime_error_Autobahn (COI21_autobahn)C++14
100 / 100
229 ms17800 KiB
#include <bits/stdc++.h> #define ll long long #define mid (l+r)/2 #define pb push_back #define mp make_pair #define all(v) v.begin(),v.end() using namespace std; const ll inf = 1e5+9,MX = 2e9+9; ll n,k,x,ans; vector<pair<ll,ll> > events; struct Range{ ll l,r,cost; ll add(){ return sz()*cost; } ll sz(){ return r-l+1; } }; vector<Range> ranges; vector<ll> presum; int main(){ cin>>n>>k>>x; for(ll i=1;i<=n;i++){ ll l,r,t; cin>>l>>t>>r; events.pb(mp(l,1)); t = min(t,r-l+1); events.pb(mp(l+t,2)); events.pb(mp(r+1,3)); } sort(all(events)); ranges.pb({0,0,0}); presum.pb(0); ll cnt = 0,charge = 0; for(ll i=0;i<events.size();){ ll j = i; while(j<events.size() && events[j].first == events[i].first){ if(events[j].second == 1) cnt++; else if(events[j].second == 2) charge++; else cnt--,charge--; j++; } if(cnt>=k) ranges.push_back({events[i].first,(j<events.size()?events[j].first:MX)-1,charge}); i = j; } ll sum = 0; for(ll i=1;i<ranges.size();i++) presum.pb(presum.back() + ranges[i].add()); for(ll i=1;i<ranges.size();i++){ ll cur = ranges[i].l + x-1; ll l = i,r = ranges.size(); while(r-l>1){ if(ranges[mid].l > cur) r = mid; else l = mid; } ll p1 = presum[l-1] - presum[i-1]; ll p2 = ranges[l].cost*min(ranges[l].sz(),(cur-ranges[l].l+1) ); ans = max(ans, p1+p2); cur = ranges[i].r-x+1,l =0,r = i; while(r-l>1){ if(ranges[mid].r< cur) l = mid; else r = mid; } p1 = presum[i] - presum[r]; p2 = ranges[r].cost*min(ranges[r].sz(),ranges[r].r-cur+1); ans = max(ans,p1+p2); } cout<<ans<<endl; }

Compilation message (stderr)

autobahn.cpp: In function 'int main()':
autobahn.cpp:39:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   39 |     for(ll i=0;i<events.size();){
      |                ~^~~~~~~~~~~~~~
autobahn.cpp:41:16: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |         while(j<events.size() && events[j].first == events[i].first){
      |               ~^~~~~~~~~~~~~~
autobahn.cpp:51:49: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |             ranges.push_back({events[i].first,(j<events.size()?events[j].first:MX)-1,charge});
      |                                                ~^~~~~~~~~~~~~~
autobahn.cpp:56:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<Range>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |     for(ll i=1;i<ranges.size();i++)
      |                ~^~~~~~~~~~~~~~
autobahn.cpp:59:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<Range>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |     for(ll i=1;i<ranges.size();i++){
      |                ~^~~~~~~~~~~~~~
autobahn.cpp:55:8: warning: unused variable 'sum' [-Wunused-variable]
   55 |     ll sum = 0;
      |        ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...