记录编号 |
55513 |
评测结果 |
AAAAAAAAAAAA |
题目名称 |
售票系统 |
最终得分 |
100 |
用户昵称 |
CAX-DY |
是否通过 |
通过 |
代码语言 |
Pascal |
运行时间 |
0.186 s |
提交时间 |
2013-03-20 14:07:45 |
内存使用 |
1.30 MiB |
显示代码纯文本
uses math;
const maxn=1<<17; ok='YES'; no='NO';
var i,j,k,c,s,r,dep:int64; a:array[0..maxn]of int64;
procedure ins(x,y,z:int64); var i:int64;
begin
x:=x+dep-1; y:=y+dep+1;
while x xor y<>1 do
begin
if x and 1=0 then inc(a[x xor 1],z);
if y and 1=1 then inc(a[y xor 1],z);
i:=max(a[x],a[x xor 1]); dec(a[x],i); dec(a[x xor 1],i); inc(a[x>>1],i);
i:=max(a[y],a[y xor 1]); dec(a[y],i); dec(a[y xor 1],i); inc(a[y>>1],i);
x:=x>>1; y:=y>>1;
end;
while x>1 do
begin
i:=max(a[x],a[x xor 1]);
dec(a[x],i); dec(a[x xor 1],i); inc(a[x>>1],i);
x:=x>>1;
end;
end;
function get(x,y:int64):int64; var i,j:int64;
begin
x:=x+dep; y:=y+dep; i:=0; j:=0;
if x<>y then begin
while x xor y<>1 do
begin
i:=i+a[x]; j:=j+a[y];
if x and 1=0 then i:=max(i,a[x xor 1]);
if y and 1=1 then j:=max(j,a[y xor 1]);
x:=x>>1; y:=y>>1;
end;
i:=i+a[x]; j:=j+a[y];
get:=max(i,j);
end
else get:=a[x];
while x>1 do
begin
x:=x>>1;
get:=get+a[x];
end;
end;
begin
assign(input,'railway.in'); assign(output,'railway.out'); reset(input); rewrite(output);
readln(c,s,r); dep:=1; while dep<=c+1 do dep:=dep<<1;
repeat
readln(i,j,k);
if get(i,j-1)+k<=s then
begin
writeln(ok); ins(i,j-1,k);
end
else writeln(no);
dec(r);
until r=0;
close(input); close(output);
end.