#include <bits/stdc++.h>
#define ll long long
#define f first
#define s second
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
ll n, roz; cin >> n >> roz;
if(n == 1){ cout << 0; return 0; }
vector<ll> tab(n);
priority_queue<pair<ll,ll>> kolejka;
map<pair<ll,ll>,ll> mapa;
for(ll i = 0; i < n; ++i){
cin >> tab[i];
kolejka.push(make_pair(tab[i], i));
}
pair<ll,ll> akt;
ll wyn = 0;
while(!kolejka.empty()){
akt = kolejka.top();
kolejka.pop();
if(mapa[akt] > 0){
mapa[akt]--;
continue;
}
else if(akt.s == 0){
if(tab[akt.s+1] < (akt.f-roz)){
wyn += (akt.f-roz) - tab[akt.s+1];
mapa[make_pair(tab[akt.s+1], akt.s+1)]++;
tab[akt.s+1] = akt.f-roz;
kolejka.push(make_pair(tab[akt.s+1], akt.s+1));
}
}
else if(akt.s == n-1){
if(tab[akt.s-1] < (akt.f-roz)){
wyn += (akt.f-roz) - tab[akt.s-1];
mapa[make_pair(tab[akt.s-1], akt.s-1)]++;
tab[akt.s-1] = akt.f-roz;
kolejka.push(make_pair(tab[akt.s-1], akt.s-1));
}
}
else{
if(tab[akt.s+1] < (akt.f-roz)){
wyn += (akt.f-roz) - tab[akt.s+1];
mapa[make_pair(tab[akt.s+1], akt.s+1)]++;
tab[akt.s+1] = akt.f-roz;
kolejka.push(make_pair(tab[akt.s+1], akt.s+1));
}
if(tab[akt.s-1] < (akt.f-roz)){
wyn += (akt.f-roz) - tab[akt.s-1];
mapa[make_pair(tab[akt.s-1], akt.s-1)]++;
tab[akt.s-1] = akt.f-roz;
kolejka.push(make_pair(tab[akt.s-1], akt.s-1));
}
}
}
cout << wyn;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include <bits/stdc++.h> #define ll long long #define f first #define s second using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); ll n, roz; cin >> n >> roz; if(n == 1){ cout << 0; return 0; } vector<ll> tab(n); priority_queue<pair<ll,ll>> kolejka; map<pair<ll,ll>,ll> mapa; for(ll i = 0; i < n; ++i){ cin >> tab[i]; kolejka.push(make_pair(tab[i], i)); } pair<ll,ll> akt; ll wyn = 0; while(!kolejka.empty()){ akt = kolejka.top(); kolejka.pop(); if(mapa[akt] > 0){ mapa[akt]--; continue; } else if(akt.s == 0){ if(tab[akt.s+1] < (akt.f-roz)){ wyn += (akt.f-roz) - tab[akt.s+1]; mapa[make_pair(tab[akt.s+1], akt.s+1)]++; tab[akt.s+1] = akt.f-roz; kolejka.push(make_pair(tab[akt.s+1], akt.s+1)); } } else if(akt.s == n-1){ if(tab[akt.s-1] < (akt.f-roz)){ wyn += (akt.f-roz) - tab[akt.s-1]; mapa[make_pair(tab[akt.s-1], akt.s-1)]++; tab[akt.s-1] = akt.f-roz; kolejka.push(make_pair(tab[akt.s-1], akt.s-1)); } } else{ if(tab[akt.s+1] < (akt.f-roz)){ wyn += (akt.f-roz) - tab[akt.s+1]; mapa[make_pair(tab[akt.s+1], akt.s+1)]++; tab[akt.s+1] = akt.f-roz; kolejka.push(make_pair(tab[akt.s+1], akt.s+1)); } if(tab[akt.s-1] < (akt.f-roz)){ wyn += (akt.f-roz) - tab[akt.s-1]; mapa[make_pair(tab[akt.s-1], akt.s-1)]++; tab[akt.s-1] = akt.f-roz; kolejka.push(make_pair(tab[akt.s-1], akt.s-1)); } } } cout << wyn; } |
English