poj(2892)——Tunnel Warfare(成段更新,寻找空间)

题目大意是:

给你n个房子,然后有m个操作:

(1):D x:代表摧毁第x个村庄

(2):Q x:查询与第x个村庄直接或间接(即为通过其他没有被炸毁的村庄相连接的)的村子的个数

(3):R :代表的是最后被摧毁的那个村庄被修复(这里就要用到栈了,哈哈)

唔。。。这道线段树的题目想了很久也没啥思路,网上说和poj hotel的那题很像,但是一直联系不起来,但是想通了也就这样吧。

其实线段树是一个很灵活的东西,它是辅助功能,这里它的作用是为了query(查询操作)与update(更新操作)。

当然其中还有一个lazy-tag的思想,那就是向上更新的时候,这个是经典的区间合并的操作,(其实我觉得叫这名字有点怪怪的感觉。。。

void pushup(int v){
	int temp=v<<1;
	tree[v].ls=tree[temp].ls;
	tree[v].rs=tree[temp+1].rs;
	if(tree[v].ls==tree[temp].r-tree[temp].l+1) tree[v].ls+=tree[temp+1].ls;
	if(tree[v].rs==tree[temp+1].r-tree[temp+1].l+1) tree[v].rs+=tree[temp].rs;
	tree[v].ms=max(tree[temp].rs&
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值