ex.dpr
来自「tongji acm-online judge solution」· DPR 代码 · 共 95 行
DPR
95 行
program Ural_1090(Input, Output);
const
MaxN = 10000;
type
TIndex = Longint;
TData = array[1..MaxN] of TIndex;
var
N, K: TIndex;
Max, MaxIndex: TIndex;
Count: TIndex;
D, tmp: TData;
procedure Merge(l, r: TIndex);
var
lp, rp, tp: TIndex;
begin
if (l + r) div 2 - l > 0 then Merge(l, (l + r) div 2);
if r - (l + r) div 2 - 1 > 0 then Merge((l + r) div 2 + 1, r);
lp := l;
rp := (l + r) div 2 + 1;
tp := 0;
while (lp <= (l + r) div 2) and (rp <= r) do
begin
if D[lp] < D[rp] then
begin
Inc(tp);
tmp[tp] := D[lp];
Inc(lp);
end
else if D[lp] > D[rp] then
begin
Inc(tp);
Inc(Count, (l + r) div 2 - lp + 1); // D[lp -> (l + r) div 2] All More than D[rp]
tmp[tp] := D[rp];
Inc(rp);
end;
{ //This state is impossble for this problem
else if D[lp] = D[rp] then
begin
Inc(tp);
tmp[tp] := D[lp];
Inc(lp);
Inc(tp);
tmp[tp] := D[rp];
Inc(rp);
end; }
end;
while lp <= (l + r) div 2 do
begin
Inc(tp);
tmp[tp] := D[lp];
Inc(lp);
end;
while rp <= r do
begin
Inc(tp);
tmp[tp] := D[rp];
Inc(rp);
end;
Move(tmp[1], D[l], SizeOf(tmp[1]) * tp);
end;
procedure Main;
var
i, j: TIndex;
begin
Readln(N, K);
Max := -1;
MaxIndex := 0;
for i := 1 to K do
begin
for j := 1 to N do
Read(D[j]);
Readln;
Count := 0;
Merge(1, N);
if Count > Max then
begin
Max := Count;
MaxIndex := i;
end;
end;
Writeln(MaxIndex);
end;
begin
{ Assign(Input, 'i.txt');
Reset(Input);
Assign(Output, 'o.txt');
Rewrite(Output); }
Main;
{ Close(Input);
Close(Output); }
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?