社区讨论
pascal 70分求改进
P2058[NOIP 2016 普及组] 海港参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mi5hsc5g
- 此快照首次捕获于
- 2025/11/19 12:18 4 个月前
- 此快照最后确认于
- 2025/11/19 12:18 4 个月前
CPP
var
n,i,j,temp,time,people,w:longint;
s,k,y,ren:array[1..2000] of longint;
x:array[1..1000,1..3000] of integer;
procedure sort(l,r:longint);
var i,j,m:longint;
begin
i:=l;
j:=r;
m:=s[y[(l+r) div 2]];
while i<=j do begin
while s[y[i]]<m do inc(i);
while s[y[j]]>m do dec(j);
if i<=j then
begin
temp:=y[i];
y[i]:=y[j];
y[j]:=temp;
dec(j);
inc(i);
end;
end;
if i<r then sort(i,r);
if j>l then sort(l,j);
end;
procedure put(u:longint);
var
i:longint;
begin
for i:=1 to k[u] do
begin
if ren[x[u,i]]=0 then inc(people);
inc(ren[x[u,i]]);
end;
end;
procedure delete(u:longint);
var
i:longint;
begin
for i:=1 to k[u] do
begin
dec(ren[x[u,i]]);
if ren[x[u,i]]=0 then dec(people);
end;
end;
begin
readln(n);
for i:=1 to n do begin
read(s[i],k[i]);
for j:=1 to k[i] do read(x[i,j]);
s[i+n]:=s[i]+86400;
y[i]:=i;
y[i+n]:=i+n;
readln;
end;
sort(1,2*n);
for i:=1 to 2*n do
if y[i]<=n then begin
put(y[i]);
writeln(people);
inc(w);
if w=n then exit;
end
else delete(y[i]-n);
end.
回复
共 0 条回复,欢迎继续交流。
正在加载回复...