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
program siano; //Runda 1-A   KOMPRESJA a                   28.09.2015
const polmax=500000;//max liczby zasianych gatunków
      pmax=1000000;
type Ti=longint;
var m,pole,i,j,k,d,b,dst,t,ai:Ti;//m:lskoszeń, t:czas miedzy pokosami
  sum:qword;//siano z jednego pokosu
  Tab:array[1..polmax] of record a,h,w:Ti end;
 //a:dobowe przyrosty, h:aktualne wysokości, w:wagi(krotności ai)
  P:array[1..pmax] of Ti;//pomocnicza do kompresji
  
begin
  readln(pole,m);
  for i:=1 to pmax do P[i]:=0;//init
  for i:=1 to pole do  begin read(ai); P[ai]+=1 end;
  i:=0;
  for k:=1 to pmax do  if P[k]>0 then
  begin i+=1; Tab[i].a:=k; Tab[i].w:=P[k] end;
  pole:=i;
  for i:=1 to pole do Tab[i].h:=0;//init
  dst:=0; //init nr-u dnia koszenia
  for j:=1 to m do
  begin //j-te koszenie
    readln(d,b);//d:nr dnia, b:wysokość koszenia
    t:=d-dst; dst:=d;
    sum:=0;//czas od ostatniego koszenia
    for i:=1 to pole do  with Tab[i] do
    begin
      h+=a*t;//aktualizacja h
      if h>b then
      begin
        sum+=((h-b)*w); h:=b
      end;
    end;
    writeln(sum)
  end
end.