Решение
Тема: моделирование
Сложность: средняя
Если использовать тип shortint (целое от 128 до 127) вместо обычного integer, то можно хранить значения всех измерений (100 x 100000 байт < 32Мб), поступивших от ИБП. Но фактически необходимы только
`M` последних значений, которые удобно хранить в кольцевом буфере размера
`M`. Также необходимо хранить количество значений меньше и равных
`L` в буфере и их сумму. При поступлении очередного измерения от
`j`-го ИБП изменяется только сумма и количество для
`j`-го ИБП, предыдущее значение удаляется и вычитается из суммы, а новое записывается на его место в кольцевом буфере и прибавляется к сумме. Указатель буфера смещается на следующую позицию.
var N,L,M,K,i,j,p,b:integer;
q:array[1..100,1..100] of integer;
ki,li,si:array[1..100] of integer;
begin
read(N,L,M,K);
for i:=1 to N do
begin
ki[i]:=1;
li[i]:=0;
si[i]:=100*M;
for j:=1 to M do
q[i,j]:=100;
end;
for i:=1 to K do
begin
read(j,p);
si[j]:=si[j]-q[j,ki[j]];
if q[j,ki[j]]<=L then
dec(li[j]);
si[j]:=si[j]+p;
if p<=L then
inc(li[j]);
q[j,ki[j]]:=p;
inc(ki[j]);
if ki[j]>M then
ki[j]:=1;
b:=0;
for j:=1 to N do
begin
if li[j]=M then
begin
if b=0 then
b:=j
else if si[j]<si[b] then
b:=j;
end;
end;
writeln(b);
end;
end.