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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <cstdio>
#include <algorithm>

using namespace std;
inline void putUI( unsigned long long int n) {

   if(n>0) {
         putUI(n/10);
         putc_unlocked(n%10+48,stdout);
     }
}

inline void readUI(int *w)
{
    register char c = 0;
    while (c < 33) c=getc_unlocked(stdin);
    (*w) = 0;
    while (c>32) {(*w)=(*w)*10LL + (c-48); c=getc_unlocked(stdin);}
}

inline void read(unsigned long long int *z)
{
    register char c = 0;
    while (c < 33) c=getc_unlocked(stdin);
    (*z) = 0;
    while (c>32) {(*z)=(*z)*10LL + (c-48); c=getc_unlocked(stdin);}
}

int a,b,c,d;
int main()
{

int a=0,b=0,c=0,d=0;
unsigned long long int skoszenia;
int gatunki;
int ilosc_skoszen;
unsigned long long int dni=1,dzien=1;
unsigned long long int dni_koszen;
unsigned long long int suma=0;

readUI(&gatunki);
readUI(&ilosc_skoszen);

int tab[gatunki];
unsigned long long int trawa[gatunki] ;

for(a=0;a<gatunki;a++)

readUI(&tab[a]);

sort(tab,tab+gatunki);
for(c=0;c<gatunki;c++)
trawa[c]=tab[c];
while(ilosc_skoszen--)
{
suma=0;

read(&dni_koszen);
read(&skoszenia);

dni=dni_koszen-dzien;
dzien=dni_koszen;

for(b=0;b<gatunki;b++)
{
trawa[b]+=tab[b]*dni;

}

for(d=0;d<gatunki;d++)
{

if(trawa[d]>skoszenia)
{
suma+=trawa[d]-skoszenia;
trawa[d]=skoszenia;
}

}
printf("%llu\n",suma);

}
    return 0;
}