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
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn = 2*100*1000+9;

struct piec{
	int n;
	int d;
	long long f;
	int t;
};

long long T[maxn];
long long R[maxn];

bool operator<(piec a, piec b) {
	return a.d < b.d;
}


int main() {
	int n, m;
	cin>>n>>m;
	for(int i=0; i<n; i++)
		cin>>T[i];
	vector<piec> D;
	piec d;
	for(int i=0; i<m; i++) {
		cin>>d.d;
		d.n = i;
		d.f = 0;
		R[i]=0;
		d.t = -1;
		D.push_back(d);
	}
	
	sort(D.begin(), D.end());
	
	for(int i=0; i<n; i++) {
		for(int j = m-1; j>=0; j--) {
			if(D[j].t != i-1) {
				D[j].f = T[i-1];
			}
			D[j].t = i;
			D[j].f = max(T[i] - D[j].d, D[j].f) + D[j].d;
			long long r = D[j].f - T[i];
			R[D[j].n] += r;
			if(r <= 0)
				break;
		}
	} 
	
	for(int i=0; i<m; i++)
		cout<<R[i]<<endl;
	
	return 0;
}