| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
AC代码In Reply To:我来造福人类。。 Posted by:bigTG at 2014-03-14 22:36:30 {Memory:7192K
Time:297MS
Language:Pascal
Code Length:1995B}
program count;
type
TTree=^Node;
Node=record
L,R,col:longint;
lc,rc:TTree;
same:boolean; //same的意义在于,same为true则区间为纯色,为false则为混色
end;
var
long,O,i,a,b,c:longint;
T:TTree;
ch:char;
procedure swap(var a,b:longint);
var k:longint;
begin
k:=a; a:=b; b:=k;
end;
procedure build(var T:TTree;L,R:longint);
var mid:longint;
begin
new(T);
T^.L:=L; T^.R:=R;
T^.lc:=nil; T^.rc:=nil;
T^.col:=1; T^.same:=true;
if L<R then
begin
mid:=(L+R) shr 1;
build(T^.lc,L,mid);
build(T^.rc,mid+1,R);
end;
end;
procedure paint(var T:TTree;L,R,c:longint);
var mid:longint;
begin
if (T^.L=L) and (T^.R=R) then
begin
T^.same:=true;
T^.col:=c;
exit;
end;
if T^.same then
begin
T^.same:=false;
T^.lc^.col:=T^.col;
T^.lc^.same:=true;
T^.rc^.col:=T^.col;
T^.rc^.same:=true;
end;
mid:=(T^.L+T^.R) shr 1;
if R<=mid then paint(T^.lc,L,R,c)
else if L>mid then paint(T^.rc,L,R,c)
else
begin
paint(T^.lc,L,mid,c);
paint(T^.rc,mid+1,R,c);
end;
T^.col:=T^.lc^.col or T^.rc^.col;
end;
function query(T:TTree;L,R:longint):longint;
var mid:longint;
begin
if T^.same then exit(T^.col);
if (T^.L=L) and (T^.R=R) then exit(T^.col);
mid:=(T^.L+T^.R) shr 1;
if R<=mid then exit(query(T^.lc,L,R))
else if L>mid then exit(query(T^.rc,L,R))
else exit(query(T^.lc,L,mid) or query(T^.rc,mid+1,R));
end;
function count(c:longint):integer;
var i,x:longint;
begin
count:=0;
x:=1;
for i:= 1 to 30 do
begin
if x and c>0 then inc(count);
x:=x shl 1;
end;
end;
begin
readln(long,O,O);
build(T,1,long);
for i:= 1 to O do
begin
read(ch);
case ch of
'C':
begin
readln(a,b,c);
if a>b then swap(a,b); //注意题目说"A may be larger than B"
paint(T,a,b,1 shl (c-1));
end;
'P':
begin
readln(a,b);
if a>b then swap(a,b);
writeln(count(query(T,a,b)));
end;
end;
end;
end.
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator