#include<cstdio> #include<unordered_map> using namespace std; int n, m; long long int clients[200000]; int main() { scanf("%d %d", &n, &m); for(int i = 0; i < n; i++) scanf("%lld", &clients[i]); unordered_map<int, long long int> map; while(m) { int d; scanf("%d", &d); auto found = map.find(d); if(found != map.end()) { printf("%lld\n", found->second); } else { long long int sum = 0; long long int last = 0; for(int i = 0; i < n; i++) { long long int dif = clients[i] - last; last = clients[i]; if(dif < d) { sum += d - dif; last += d - dif; } } map.insert({d, sum}); printf("%lld\n", sum); } --m; } return 0; }
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 | #include<cstdio> #include<unordered_map> using namespace std; int n, m; long long int clients[200000]; int main() { scanf("%d %d", &n, &m); for(int i = 0; i < n; i++) scanf("%lld", &clients[i]); unordered_map<int, long long int> map; while(m) { int d; scanf("%d", &d); auto found = map.find(d); if(found != map.end()) { printf("%lld\n", found->second); } else { long long int sum = 0; long long int last = 0; for(int i = 0; i < n; i++) { long long int dif = clients[i] - last; last = clients[i]; if(dif < d) { sum += d - dif; last += d - dif; } } map.insert({d, sum}); printf("%lld\n", sum); } --m; } return 0; } |