#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
struct Slope{
multiset<int>l;
multiset<int>r;
int b = 0;
int delta = 0;
void balance(){
while(l.size() < r.size()){
int fst = *r.begin() + delta;
r.erase(r.begin());
l.insert(fst);
}
while(l.size() > r.size()){
int lst = *--l.end();
r.insert(lst-delta);
l.erase(--l.end());
}
}
void shiftmin(int x){
balance();
delta += x;
}
void add(int x){ // multiset insert x two times
b += x;
if(l.size() && *--l.end() >= x){
l.insert(x); l.insert(x);
}
else{
r.insert(x-delta); r.insert(x-delta);
}
balance();
}
int evalmn(){
balance();
int cur = 0;
int y = b;
int m = -l.size();
for(int nxt: l){
y += m * (nxt-cur);
cur = nxt;
m++;
}
return y;
}
};
signed main() {
cin.tie(0)->sync_with_stdio(0);
int n,h;
cin >> n >> h;
vector<int>a(n+1);
for(int i = 1; i<=n; i++){
cin >> a[i];
a[i] += i*h;
}
Slope s;
for(int i = 1; i<=n; i++){
if(i>1){
s.shiftmin(2*h);
}
s.add(a[i]);
}
cout << s.evalmn() << '\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |