#include <iostream>
#include <vector>
using namespace std;
int n,k,w,m=-1,mp=-1,l;
vector <int> c,co;
vector <bool> odw;
void ogarnij(int a)
{
odw[a]=true;
int lw=-1,pw=-1,pch;
pch=c[a];
if(a>0)
{
lw=c[a-1]-k;
}
if(a<n)
{
pw=c[a+1]-k;
}
//cout << lw << " " << c[a] << " " << pw << '\n';
c[a]=max(max(lw,c[a]),pw);
if(a>0&&abs(c[a]-c[a-1])>k) ogarnij(a-1);
if(a<n&&abs(c[a]-c[a+1])>k) ogarnij(a+1);
}
int main()
{
cin >> n >> k;
for(int i=0; i<n; i++)
{
cin >> w;
if(w>m)
{
m=w;
mp=i;
}
c.push_back(w);
co.push_back(w);
odw.push_back(false);
}
for(int i=0;i<n;i++)
{
if(odw[i]==false)
{
ogarnij(i);
}
}
/*for(int i=1;i<max(mp,n-mp);i++)
{
if(mp-i>=0)
{
if(c[mp-i]-c[mp-i+1])
}
}*/
/*for(int i=0; i<n; i++)
{
if(i>0)
{
c2[i-1]=max(c[i-1],c[i]-k);
cout << c[i-1] << " " << c[i]-k << '\n';
}
if(i<n)
{
c2[i+1]=max(c[i+1],c[i]-k);
cout << c[i+1] << " " << c[i]-k << '\n';
}
}*/
l=0;
for(int i=0; i<n; i++)
{
//cout << c[i] << " " << co[i] << '\n';
l+=abs(c[i]-co[i]);
}
cout << l;
return 0;
}
/*
5 3
2 4 5 2 4
5 5
10 17 5 2 7
12 17 12 7 7
*/
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #include <iostream> #include <vector> using namespace std; int n,k,w,m=-1,mp=-1,l; vector <int> c,co; vector <bool> odw; void ogarnij(int a) { odw[a]=true; int lw=-1,pw=-1,pch; pch=c[a]; if(a>0) { lw=c[a-1]-k; } if(a<n) { pw=c[a+1]-k; } //cout << lw << " " << c[a] << " " << pw << '\n'; c[a]=max(max(lw,c[a]),pw); if(a>0&&abs(c[a]-c[a-1])>k) ogarnij(a-1); if(a<n&&abs(c[a]-c[a+1])>k) ogarnij(a+1); } int main() { cin >> n >> k; for(int i=0; i<n; i++) { cin >> w; if(w>m) { m=w; mp=i; } c.push_back(w); co.push_back(w); odw.push_back(false); } for(int i=0;i<n;i++) { if(odw[i]==false) { ogarnij(i); } } /*for(int i=1;i<max(mp,n-mp);i++) { if(mp-i>=0) { if(c[mp-i]-c[mp-i+1]) } }*/ /*for(int i=0; i<n; i++) { if(i>0) { c2[i-1]=max(c[i-1],c[i]-k); cout << c[i-1] << " " << c[i]-k << '\n'; } if(i<n) { c2[i+1]=max(c[i+1],c[i]-k); cout << c[i+1] << " " << c[i]-k << '\n'; } }*/ l=0; for(int i=0; i<n; i++) { //cout << c[i] << " " << co[i] << '\n'; l+=abs(c[i]-co[i]); } cout << l; return 0; } /* 5 3 2 4 5 2 4 5 5 10 17 5 2 7 12 17 12 7 7 */ |
English