Submission #1244928

#TimeUsernameProblemLanguageResultExecution timeMemory
12449282288Meetings (IOI18_meetings)C++20
19 / 100
5594 ms22144 KiB
#include "meetings.h" using namespace std; #define ALL(x) begin(x),end(x) #define pb push_back #define F first #define S second // #define int long long typedef long long ll; typedef pair<int,int> ii; typedef vector<int> vi; typedef vector<ii> vii; typedef vector<bool> vb; typedef vector<vi> vvi; typedef vector<vii> vvii; typedef vector<vb> vvb; template<typename T> T meq(T& a, T b){ return a=max(a,b); } #define D 20 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(Q); vi lg(n+1); lg[0]=-10000000;lg[1]=0; for (int i=2;i<=n;i++)lg[i]=lg[i/2]+1; vvii mxs(D, vii(n)); // height, ind for (int i=0;i<n;i++)mxs[0][i]={H[i], i}; for (int d=1;d<D;d++){ for (int i=0;i<n;i++){ mxs[d][i]=mxs[d-1][i]; if(i+(1<<(d-1))<n)meq(mxs[d][i],mxs[d-1][i+(1<<(d-1))]); } } auto solve = [&](auto&& self, int l, int r) -> ll { int len = r-l; if (len==0)return 0; if (len==1)return H[l]; int d = lg[len]; auto [mx, pmx] = max(mxs[d][l], mxs[d][r-(1<<d)]); return min( ll(mx)*ll(pmx-l+1) + self(self, pmx+1, r), ll(mx)*ll(r-pmx) + self(self, l, pmx) ); }; for (int j = 0; j < Q; ++j) { C[j] = solve(solve, L[j], R[j]+1); } 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...