Submission #1321462

#TimeUsernameProblemLanguageResultExecution timeMemory
1321462blopSnowball (JOI21_ho_t2)C++20
100 / 100
72 ms8392 KiB
#include<bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; using namespace std; template<class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; template<class T, class U> using ordered_map = tree<T, U, less<T>, rb_tree_tag, tree_order_statistics_node_update>; #define ll long long #define MOD 1000000007 #define MAXN 2e5 #define SIZE 314 #define pb push_back ll power(ll a, ll b){ if (b == 0) return 1; ll res = power(a, b / 2); if (b % 2 == 1) return res * res % MOD * a % MOD; return res * res % MOD; // if (b % 2 == 1) return res * res * a; // return res * res; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n, q; cin >> n >> q; vector<ll> nums(n + 1); for (int i = 1; i <= n; i++){ cin >> nums[i]; } vector<ll> minPrefix(q + 1, 0), maxPrefix(q + 1, 0); ll curr = 0; for (int i = 1; i <= q; i++){ ll w; cin >> w; curr += w; minPrefix[i] = min(minPrefix[i - 1], curr); maxPrefix[i] = max(maxPrefix[i - 1], curr); } vector<ll> ans(n + 1, 0); ans[1] += abs(minPrefix[q]); ans[n] += abs(maxPrefix[q]); for (int i = 1; i < n; i++){ ll l = 0, r = q, mid; ll goodIdx = 0; ll dis = nums[i + 1] - nums[i]; while(l <= r){ mid = (r - l) / 2 + l; if (maxPrefix[mid] + abs(minPrefix[mid]) <= dis){ goodIdx = mid; l = mid + 1; } else{ r = mid - 1; } } ans[i] += maxPrefix[goodIdx]; ans[i + 1] += abs(minPrefix[goodIdx]); if (goodIdx == q) continue; if (maxPrefix[goodIdx + 1] != maxPrefix[goodIdx]){ ans[i] += dis - maxPrefix[goodIdx] - abs(minPrefix[goodIdx]); } else{ ans[i + 1] += dis - maxPrefix[goodIdx] - abs(minPrefix[goodIdx]); } } for (int i = 1; i <= n; i++){ cout << ans[i] << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...