ssl例1

桌子上零散地放着若干个盒子,桌子的后方是一堵墙。如右图所示。现在从桌子的前方射来一束平行光, 把盒子的影子投射到了墙上。问影子的总宽度是多少?


题解:

给线段树每个节点增加一个域cover。cover=1表示该结点所对应的区间被完全覆盖,cover=0表示该结点所对应的区间未被完全覆盖。

代码:

if s[p].cover=0 then
    begin
        m:=(s[p].b+s[p].e) div 2;
        if (a=s[p].b)and(b=s[p].e) then
           s[p].cover:=1
        else if b<=m then insert(p*2,a,b)
        else if a>=m then insert(p*2+1,a,b)
        else begin
           insert(p*2,a,m);
           insert(p*2+1,m,b);
        end;
    end;

你可能感兴趣的:(线段树)