博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1540 Tunnel Warfare [二分 + 线段树]
阅读量:4673 次
发布时间:2019-06-09

本文共 1864 字,大约阅读时间需要 6 分钟。

题意:
n个村庄排成一排,3种操作。
1,摧毁某个村庄
2,问与某个村庄x直接或间接连在一起的村庄有几个(包括它自己)
3,重建最后被摧毁的村庄

用1表示村庄村庄,0表示已被摧毁,维护好区间和。对于一个询问 x ,找到最大的 x2 满足 sum(x,x2)=x2x+1 ,还有 最小的 x1 满足sum(x1,x)=xx1+1 ,则与它相连的村庄个数为 x2x1+1 个。可以用二分法去找。

从样例可以看出,3操作可以进行多步撤消,用一个栈将摧毁的过程记录下来就好。

另:对于单点更新区间求和,用树状数组更快。

#include
#include
#include
#include
#include
using namespace std;#define debug(x) cout<<"debug "<
<
>1;const int maxn = 50001 << 2;int n,m;struct sgt{ int sum[maxn]; void init(int node,int L,int R){ if(L == R)sum[node] = 1; else{ MID;CHD; init(lc,L,mid); init(rc,mid+1,R); sum[node] = sum[lc]+sum[rc]; } } void update(int pos,int v,int node,int L,int R){ if(L == R){ sum[node] = v; } else { MID;CHD; if(pos <= mid) update(pos,v,lc,L,mid); else update(pos,v,rc,mid+1,R); sum[node] = sum[lc]+sum[rc]; } } int query(int from,int to,int node,int L,int R){ if(from <= L && R <= to){ return sum[node]; } MID;CHD; int ans = 0; if(from <= mid)ans += query(from,to,lc,L,mid); if(to > mid)ans += query(from,to,rc,mid+1,R); return ans; } int solve(int x){ if(query(x,x,1,1,n)==0)return 0; int ans = 0; int L = x,R = n+1; while(L < R){ MID; if(query(x,mid,1,1,n) == (mid-x+1))L = mid+1; else R = mid; } ans += L-x; L = 0,R = x; while(L < R){ MID; if(query(mid,x,1,1,n)==(x-mid+1))R = mid; else L = mid+1; } ans += x-R; //注意不要把x点记重复 return ans; }}tree;int main(){ while(scanf("%d%d",&n,&m) == 2){ tree.init(1,1,n); stack
s; int ls,q; char c; while(m--){ scanf(" %c",&c); switch(c){ case 'D': scanf("%d",&ls); s.push(ls); tree.update(ls,0,1,1,n); break; case 'R': if(!s.empty()){ tree.update(s.top(),1,1,1,n); s.pop(); } break; case 'Q': scanf("%d",&q); int ans = tree.solve(q); printf("%d\n",ans); break; } } } return 0;}

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/DSChan/p/4861980.html

你可能感兴趣的文章
vue.js组件命名
查看>>
PostGis Mapserver Openscales 环境搭建
查看>>
design pattern notes [4] - chain of responsibility, visitor
查看>>
poj 1611 The Suspects
查看>>
通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进
查看>>
ftp protocol
查看>>
sqlserver字段类型详解(转)
查看>>
PowerDesigner使用总结(转)
查看>>
VM Mac 共享文件夹一闪而过
查看>>
PAT Basic 1030
查看>>
(转)Stage3D程序的基本步骤
查看>>
68家信托公司7大派系股东分食图谱
查看>>
检查第一组博客状况
查看>>
Django--ORM相关操作
查看>>
Java中删除文件
查看>>
省选专练POI2015 Wilcze doły
查看>>
IntelliJ IDEA和Eclipse最常用的快捷键对应表
查看>>
[codevs 1306]广播操的游戏(Trie)
查看>>
Mutual Training for Wannafly Union #9
查看>>
mustache语法整理
查看>>