Submission #1244925

#TimeUsernameProblemLanguageResultExecution timeMemory
1244925jeroenodbMeetings (IOI18_meetings)C++20
19 / 100
5590 ms5364 KiB
#include "meetings.h" #include "bits/stdc++.h" using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vvi; #define all(x) begin(x),end(x) const int oo = 1e9; std::vector<long long> minimum_costs(std::vector<int> H, std::vector<int> L, std::vector<int> R) { int Q = L.size(); int n =H.size(); std::vector<long long> C; vi l(n); for(int i=0;i<n;++i) { l[i]=i-1; while(l[i]>=0 and H[l[i]]<=H[i]) { l[i]=l[l[i]]; } } vi r(n); for(int i=n-1;i>=0;--i) { r[i]=i+1; while(r[i]<n and H[r[i]]<=H[i]) { r[i] = r[r[i]]; } } for(int i=0;i<Q;++i) { int ql = L[i],qr = R[i]; vector<ll> dpl(n),dpr(n); for(int i=ql;i<=qr;++i) { if(l[i]<ql) { dpl[i] = (i-ql+1)*ll(H[i]); } else dpl[i] = (i-l[i])*ll(H[i]) + dpl[l[i]]; } for(int i=qr;i>=ql;--i) { if(r[i]>qr) { dpr[i] = (qr-i+1)*ll(H[i]); } else dpr[i] = (r[i]-i)*ll(H[i]) + dpr[r[i]]; } ll ans = 1e18; for(int i=ql;i<=qr;++i) { ans=min(ans,dpl[i]+dpr[i]-H[i]); } C.push_back(ans); } return C; }
#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...