题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540
题目大意:
一些村庄排成一排,编号1-N,只要中间没有被摧毁的村庄,两个村庄就算是连接在一起的,现在有三个操作
1.摧毁编号为X的村庄
2.询问与村庄X连接的村庄有几个
3.重建上一个被摧毁的村庄
思路
我们只要知道查询的村庄X,它的左边最近的一个被摧毁的村庄,和它右边最近的一个被摧毁的村庄,就可以知道与X相连的村庄个数
所以考虑使用线段树来维护区间内被摧毁的村庄的数量,查询时如果区间的断点数为0直接返回,否则进行递归,同时更新记录上述的两个坐标,然后根据最后的坐标分类讨论一下就是答案了
重建村庄弄个栈搞一搞就好了
题目的坑点有:
1.题目没说是多组,但其实是多组
2.村庄可以重复摧毁,但是重建只需一次即可
AC代码
1 |
|