Submission #1220964

#TimeUsernameProblemLanguageResultExecution timeMemory
1220964cpdreamerMeetings (IOI18_meetings)C++20
0 / 100
5592 ms6296 KiB
#include "meetings.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;
const long long INF = 1e17;
typedef long long ll;
const ll MOD = (ll)1e9+7;
#define P pair
#define F first
#define pb push_back
#define V vector
#define all(v) v.begin(), v.end()
std::vector<long long> minimum_costs(std::vector<int> H, std::vector<int> L,
                                     std::vector<int> R) {
    int q=(int)L.size();
    int n=(int)H.size();
    V<ll>C;
    V<int>h(n+1);
    for (int i=1;i<=n;i++) {
        h[i]=H[i-1];
    }
    V<int>idl(n+100,0),idr(n+100,n+100);
    for (int i=1;i<=n;i++) {
        for (int j=i-1;j>=1;j--) {
            if (h[j]>=h[i]) {
                idl[i]=j;
                break;
            }
        }
        for (int j=i+1;j<=n;j++) {
            if (h[j]>=h[i]) {
                idr[i]=j;
                break;
            }
        }
    }
    for (int i=0;i<q;i++) {
        int l=L[i]+1,r=R[i]+1;
        V<ll>dpl(n+200,0),dpr(n+200);
        for (int j=l;j<=r;j++) {
            int id=max(idl[j],l-1);
            dpl[j]+=dpl[id]+(j-id)*h[j];
        }
        for (int j=r;j>=l;j--) {
            int id=min(idr[j],r+1);
            dpr[j]+=dpr[id]+(id-j)*h[j];
        }
        ll ans=LLONG_MAX;
        for (int j=l;j<=r;j++) {
            ans=min(ans,dpl[j]+dpr[j]-h[j]);
        }
        C.pb(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...