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
#include<iostream>
#include<vector>
int main() {
    using namespace std;
    ios_base::sync_with_stdio(0);

    long powierzchnia_pola_w_arach_i_liczba_traw, liczba_skoszen_trawy;
    cin >> powierzchnia_pola_w_arach_i_liczba_traw >> liczba_skoszen_trawy;
    vector<long long>aktualna_wysokosc_traw(powierzchnia_pola_w_arach_i_liczba_traw);
    for (int i = 0; i < powierzchnia_pola_w_arach_i_liczba_traw; i++)
        aktualna_wysokosc_traw.push_back(0);
    long * predkosc_wzrostu_trawy = new long[powierzchnia_pola_w_arach_i_liczba_traw];
    long long przyciecie_trawy_do;
    long long zebrane_siano = 0L;
    long long w_jakim_dniu_koszenie, odjecie = 0;
    long long roznica;
    for (long i = 0; i < powierzchnia_pola_w_arach_i_liczba_traw; i++)
        cin >> predkosc_wzrostu_trawy[i];
    for (long i = 0; i < liczba_skoszen_trawy; i++, zebrane_siano = 0) {
        cin >> w_jakim_dniu_koszenie >> przyciecie_trawy_do;
        roznica = w_jakim_dniu_koszenie-odjecie;
        for (long i = 0; i < powierzchnia_pola_w_arach_i_liczba_traw; i++) {
            aktualna_wysokosc_traw[i] += (predkosc_wzrostu_trawy[i]*roznica);
            if (aktualna_wysokosc_traw[i] > przyciecie_trawy_do) {
                zebrane_siano += (aktualna_wysokosc_traw[i]-przyciecie_trawy_do);
                aktualna_wysokosc_traw[i] = przyciecie_trawy_do;
            }
        }
        cout << zebrane_siano << endl;
        odjecie = w_jakim_dniu_koszenie;
    }
}