ex_treearr.dpr
来自「tongji acm-online judge solution」· DPR 代码 · 共 79 行
DPR
79 行
{
Method: Tree Array
}
program Ural_1316(Input,Output);
const
MaxSize=1 shl 20;//1048576>1000000
type
TIndex=Longint;
TCount=Int64;
TTreeArray=array[1..MaxSize]of TIndex;
var
Count:TTreeArray;
Total:TCount;
procedure TreeArray_Modify(Cur,Delta:TIndex);
begin
while Cur<=MaxSize do
begin
Inc(Count[Cur],Delta);
Inc(Cur,(Cur xor (Cur-1)) and Cur);
end;
end;
function TreeArray_Count(Cur:TIndex):TIndex;
begin
Result:=0;
while Cur>=1 do
begin
Inc(Result,Count[Cur]);
Dec(Cur,(Cur xor (Cur-1)) and Cur);
end;
end;
procedure ReadWord(var St:String);
var
Ch:Char;
begin
St:='';
repeat
Read(Ch);
if not (('A'<=Ch) and (Ch<='Z')) then Break;
St:=St+Ch;
until Eoln;
end;
function Min(A,B:TIndex):TIndex;
begin
if A<B then
Result:=A
else
Result:=B;
end;
procedure Main;
var
Price,Times:TIndex;
Tmp:Extended;
St:String;
begin
Total:=0;
FillChar(Count,SizeOf(Count),0);
while true do
begin
ReadWord(St);
if St='QUIT' then Break;
Read(Tmp);
Price:=MaxSize-Round(Tmp*100)+1; //max -> min
if St='BID' then
TreeArray_Modify(Price,1)
else if St='DEL' then
TreeArray_Modify(Price,-1)
else if St='SALE' then
begin
Read(Times);
Inc(Total,Min(Times,TreeArray_Count(Price)));
end;
Readln;
end;
Writeln(Total/100:0:2);
end;
begin
Main;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?