(UPD: 2024-12-04 14:48 UTC) Judge is not working due to Cloudflare incident. (URL) We can do nothing about it, sorry. After the incident is resolved, we will grade all submissions.

Submission #139237

#TimeUsernameProblemLanguageResultExecution timeMemory
139237LawlietMeetings (IOI18_meetings)C++14
19 / 100
538 ms2208 KiB
#include <bits/stdc++.h> #define MAX 5010 #define INF 1000000000000000000LL using namespace std; typedef long long int lli; int N, Q; lli v[MAX]; lli prefix[MAX]; lli suffix[MAX]; lli lastGreater[MAX]; lli firstGreater[MAX]; vector<lli> ans; vector<long long int> minimum_costs(vector<int> H, vector<int> l, vector<int> r) { N = H.size(); Q = l.size(); for(int g = 1 ; g <= N ; g++) v[ g ] = H[g - 1]; for(int h = 0 ; h < Q ; h++) { int L = l[h] + 1; int R = r[h] + 1; int oldL = v[ L - 1 ]; int oldR = v[ R + 1 ]; v[L - 1] = v[R + 1] = INF; lastGreater[ L ] = L - 1; firstGreater[ R ] = R + 1; prefix[ L ] = v[ L ]; suffix[ R ] = v[ R ]; prefix[ L - 1 ] = 0; suffix[ R + 1 ] = 0; for(int g = L + 1 ; g <= R ; g++) { int cur = g - 1; while(v[g] >= v[cur]) cur = lastGreater[ cur ]; lastGreater[ g ] = cur; prefix[ g ] = prefix[ cur ] + (g - cur)*v[ g ]; //printf("g = %d %d\n",g,prefix[g]); } //printf("\n"); for(int g = R - 1 ; g >= L ; g--) { int cur = g + 1; while(v[g] >= v[cur]) cur = firstGreater[ cur ]; firstGreater[ g ] = cur; suffix[ g ] = suffix[ cur ] + (cur - g)*v[ g ]; //printf("g = %d %d\n",g,suffix[g]); } //printf("\n\n\n"); lli mnAns = INF; for(int g = L ; g <= R ; g++) mnAns = min(mnAns , prefix[g] + suffix[g] - v[g]); v[ L - 1 ] = oldL; v[ R + 1 ] = oldR; ans.push_back( mnAns ); } return ans; } /*int main() { int nn, qq; scanf("%d %d",&nn,&qq); vector<int> hh(nn); vector<int> ll(qq), rr(qq); for(int g = 0 ; g < nn ; g++) scanf("%d",&hh[g]); for(int g = 0 ; g < qq ; g++) scanf("%d %d",&ll[g],&rr[g]); vector<lli> aux = minimum_costs(hh , ll , rr); for(int g = 0 ; g < qq ; g++) printf("%lld\n",aux[g]); }*/
#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...