Submission #920371

#TimeUsernameProblemLanguageResultExecution timeMemory
920371zeta7532Autobahn (COI21_autobahn)C++17
100 / 100
168 ms16492 KiB
#include <bits/stdc++.h> #pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") using namespace std; using ll = long long; const ll mod = 998244353; #define fi first #define se second #define rep(i,n) for(ll i=0;i<n;i++) #define all(x) x.begin(),x.end() #define faster ios::sync_with_stdio(false);cin.tie(nullptr) ll f(ll x,ll a,ll va,ll b,ll vb){ ll ans=0; if(va<vb){ swap(a,b); swap(va,vb); } ans+=va*min(x,a); x-=min(x,a); ans+=vb*min(x,b); x-=min(x,b); return ans; } int main() { ll N,K,X; cin >> N >> K >> X; vector<ll> l(N),t(N),r(N); vector<ll> x; rep(i,N){ cin >> l[i] >> t[i] >> r[i]; x.push_back(l[i]); x.push_back(r[i]+1); if(l[i]+t[i]<=r[i]){ x.push_back(l[i]+t[i]); } } x.push_back(0); x.push_back(1LL<<30); sort(all(x)); x.erase(unique(all(x)),x.end()); ll M=x.size()-1; vector<ll> A(M,0); vector<ll> B(M,0); rep(i,N){ ll a=lower_bound(all(x),l[i])-x.begin(); ll b=lower_bound(all(x),l[i]+t[i])-x.begin(); ll c=lower_bound(all(x),r[i]+1)-x.begin(); A[a]++; A[c]--; if(l[i]+t[i]<=r[i]){ B[b]++; B[c]--; } } rep(i,M-1) A[i+1]+=A[i],B[i+1]+=B[i]; vector<ll> cum(M,0); if(A[0]>=K) cum[0]+=B[0]*(x[1]-x[0]); for(ll i=1;i<M;i++){ cum[i]=cum[i-1]; if(A[i]>=K) cum[i]+=B[i]*(x[i+1]-x[i]); } ll ans=0; for(ll i=1;i<M;i++){ ll ok=i,ng=M; while(ng-ok>1){ ll mid=(ok+ng)/2; if(x[mid]>x[i]+X) ng=mid; else ok=mid; } ll len=X-(x[ok]-x[i]); ll l=x[i]-x[i-1]; ll val_l=0; if(A[i-1]>=K) val_l=B[i-1]; ll r=x[ok+1]-x[ok]; ll val_r=0; if(A[ok]>=K) val_r=B[ok]; ll cnt=cum[ok-1]-cum[i-1]+f(len,l,val_l,r,val_r); ans=max(ans,cnt); if(i==ok) continue; i++; len=X-(x[ok]-x[i]); l=x[i]-x[i-1]; val_l=0; if(A[i-1]>=K) val_l=B[i-1]; r=x[ok+1]-x[ok]; val_r=0; if(A[ok]>=K) val_r=B[ok]; cnt=cum[ok-1]-cum[i-1]+f(len,l,val_l,r,val_r); ans=max(ans,cnt); i--; } cout << ans << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...