// wrong solution: only check k smallest and largest values (here k=400) #include #include #include using namespace std; using ll = long long; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; ll c; cin >> c; set> s; vector v(n); for (int i = 0; i < n; i++) { cin >> v[i]; s.insert({v[i],i}); ll m = 0; auto it = s.begin(); for (int k = 0; k < 400; k++) { int j = it->second; m = max(m,abs(v[i]-v[j])-c*(i-j)); it++; if (it == s.end()) break; } it = s.end(); it--; for (int k = 0; k < 400 && it != s.end(); k++) { int j = it->second; m = max(m,abs(v[i]-v[j])-c*(i-j)); if (it == s.begin()) break; it--; } cout << m << " "; } cout << "\n"; }