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
#include <cstdio>
#include <iostream>
#include <vector>
#include <limits>
using namespace std;

int main()
{
    int n, m;
    vector<long long int> wzrostTrawy;
    vector<long long int> dniKoszenia;
    vector<long long int> obecnyRozmiarTrawy;
    vector<long long int> ustawienieKosiarki;

    scanf("%d", &n);
    scanf("%d", &m);

    for(int i = 0; i < n; ++i)
    {
        long long int tmp;
        scanf("%lld", &tmp);
        wzrostTrawy.push_back(tmp);
        obecnyRozmiarTrawy.push_back(0L);
    }
    
    for(int i = 0; i < m; ++i)
    {
        long long int dzien, kosiarka;
        scanf("%lld %lld", &dzien, &kosiarka);
        dniKoszenia.push_back(dzien);
        ustawienieKosiarki.push_back(kosiarka);
    }

    long long int poprzedniDzien = 0;
    for(int i = 0; i < m; ++i)
    {
        long long int wynik = 0;
        long long int danyDzien = dniKoszenia.at(i);
        long long int roznicaDni = danyDzien - poprzedniDzien;
        for(int j = 0; j < n; ++j)
        {
            obecnyRozmiarTrawy.at(j) = obecnyRozmiarTrawy.at(j) + wzrostTrawy.at(j) * roznicaDni;
            if(ustawienieKosiarki.at(i) <= obecnyRozmiarTrawy.at(j))
            {
                wynik += (obecnyRozmiarTrawy.at(j) - ustawienieKosiarki.at(i));
                obecnyRozmiarTrawy.at(j) = ustawienieKosiarki.at(i);
            }
        }
        poprzedniDzien = danyDzien;
        printf("%lld\n", wynik);
    }
    return 0;
}