This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define pb push_back
#define eb emplace_back
#define all(a) begin(a), end(a)
#define F first
#define S second
using namespace std;
using ll = long long;
vector<ll> v, Q;
void load() {
int n, q;
cin >> n >> q;
v.resize(n);
Q.resize(q);
for (auto &it : v) cin >> it;
for (auto &it: Q) cin >> it;
}
void fix(vector<ll> const &a, vector<ll> const &b, vector<pair<ll, int>> const &items, vector<ll> &ans) {
int p = (int)size(a) - 1;
for (auto const &[len, idx] : items) {
while (p >= 0 && a[p] + b[p] > len) --p;
ll add = 0;
if (p != size(a) - 1) add = max(add, len - b[p + 1]);
if (p != -1) add = max(add, a[p]);
ans[idx] += add;
}
}
void solve() {
Q.insert(begin(Q), 0);
partial_sum(begin(Q), end(Q), begin(Q));
vector<ll> mxs(size(Q)), mns(size(Q));
partial_sum(begin(Q), end(Q), begin(mxs), [](ll a, ll b) {
return max(a, b);
});
partial_sum(begin(Q), end(Q), begin(mns), [](ll a, ll b) {
return max(a, -b);
});
vector<ll> ans(size(v));
vector<pair<ll, int>> rs(size(v) - 1), ls(size(v) - 1);
ans[0] += mns.back();
ans.back() += mxs.back();
for (int i = 0; i < size(v); ++i) {
if (i != 0) ls[i - 1] = {v[i] - v[i - 1], i};
if (i != size(v) - 1) rs[i] = {v[i+1] - v[i], i};
}
sort(all(rs), greater<>());
sort(all(ls), greater<>());
fix(mxs, mns, rs, ans);
fix(mns, mxs, ls, ans);
for (auto it: ans) {
cout << it << '\n';
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
load();
solve();
return 0;
}
Compilation message (stderr)
Main.cpp: In function 'void fix(const std::vector<long long int>&, const std::vector<long long int>&, const std::vector<std::pair<long long int, int> >&, std::vector<long long int>&)':
Main.cpp:29:8: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
29 | if (p != size(a) - 1) add = max(add, len - b[p + 1]);
| ~~^~~~~~~~~~~~~~
Main.cpp: In function 'void solve()':
Main.cpp:49:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
49 | for (int i = 0; i < size(v); ++i) {
| ~~^~~~~~~~~
Main.cpp:51:8: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
51 | if (i != size(v) - 1) rs[i] = {v[i+1] - v[i], i};
| ~~^~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |