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 <iostream>
#include <map>

using namespace std;

struct DaneWzrostu{
	int iloscGatunkow=0;
	long long obecnaWysokosc=0;
};

int main(){
	int n, m;
	cin >> n;
	cin >> m;

	map<int, DaneWzrostu> wzrosty;

	int a;
	for (int i = 0; i < n; ++i){
		cin >> a;
		++(wzrosty[a].iloscGatunkow);
	}

	long long d, b;
	long long poprzednieD = 0;
	long long czasOdOstatniegoKoszenia;
	for (int i = 0; i < m; ++i){
		cin >> d;
		cin >> b;
		czasOdOstatniegoKoszenia = d - poprzednieD;
		poprzednieD = d;
		long long zniwo = 0;
		for (auto &wzrost : wzrosty){
			wzrost.second.obecnaWysokosc += czasOdOstatniegoKoszenia*wzrost.first;
			if (b < wzrost.second.obecnaWysokosc){
				zniwo += (wzrost.second.obecnaWysokosc - b)*wzrost.second.iloscGatunkow;
				wzrost.second.obecnaWysokosc = b;
			}
		}
		cout << zniwo << endl;
	}

	return 0;
}