Submission #621995

#TimeUsernameProblemLanguageResultExecution timeMemory
621995DeepessonBoxes with souvenirs (IOI15_boxes)C++17
10 / 100
1 ms256 KiB
#include <bits/stdc++.h>
long long delivery(int N, int K, int L, int p[]);

using ll = long long;
ll inf = 1LL<<60LL;
typedef std::pair<ll,ll> pll;
long long delivery(int N, int K, int L, int p[]) {
    ll dp[N+1];
    for(auto&x:dp)x=inf;
    dp[0]=0;
    std::deque<ll> dn;
    std::deque<pll> dc;
    dn.push_back(0);
    dc.push_back({2*L-2*p[0],0});
    for(int i=0;i!=N;++i){
        ll custo_local = std::min((ll)L,(ll)2*p[i]);
        dp[i+1]=std::min(dn.front()+custo_local,dc.front().first);
        if(dn.size()==K){
            dn.pop_front();
        }
        while(dc.size()&&((i+1)-dc.front().second+1)>=K){
            dc.pop_front();
        }
        ll custo_push = 2*L-2*p[i+1];
        dn.push_back(dp[i+1]);
        ll custo_final = dp[i+1]+custo_push;
        while(dc.size()&&dc.back().first>=custo_final)dc.pop_back();
        dc.push_back({custo_final,i+1});
    }
    return dp[N];
}

Compilation message (stderr)

boxes.cpp: In function 'long long int delivery(int, int, int, int*)':
boxes.cpp:18:21: warning: comparison of integer expressions of different signedness: 'std::deque<long long int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   18 |         if(dn.size()==K){
      |            ~~~~~~~~~^~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...