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 <cstdio>
#include <vector>

int main()
{
	// n - powierzchnia pola Bajtazara w arach
	// m - liczba skoszeń trawy
	int n, m;
	// cmPerDay[i] - szybkość wzrostu trawy gatunku i
	int *cmPerDay;
	// mows[i][0] - dzień w którym Bajtazar wykonał i-te koszenie
	// mows[i][1] - przy i-tym koszeniu Bajtazar przyciął trawę na tyle cm
	std::vector<long long> *mows;

	// kgs[i] - waga siania uzyskanego po i-tym koszeniu;
	long long *kgs;

	// lastHeight[i] - wysokość i-tego gatunku trawy po ostatnim koszeniu
	int *lastHeight;

	scanf("%d%d", &n, &m);
	cmPerDay = new int[n];
	mows = new std::vector<long long>[m+1];
	kgs = new long long[m];
	lastHeight = new int[n];

	for (int i = 0; i < n; ++i)
	{
		scanf("%d", &cmPerDay[i]);
		lastHeight[i] = cmPerDay[i];
	}

	mows[0].push_back(1);
	for (int i = 1; i <= m; ++i)
	{
		mows[i].push_back(0);
		mows[i].push_back(0);
		scanf("%lld%lld", &mows[i][0], &mows[i][1]);

		kgs[i] = 0;
	}

	for (int i = 1; i <= m; ++i)
	{
		for (int j = 0; j < n; ++j)
		{
			long long w = lastHeight[j] + ((mows[i][0]-mows[i-1][0]) * cmPerDay[j]);
			long long p = (w > mows[i][1]) ? mows[i][1] : w;

			kgs[i] += (w - p);
			lastHeight[j] = p;
		}

		printf("%lld\n", kgs[i]);
	}

	return 0;
}