HDU 1754--线段树
中文题,不解释。。
思路:
线段树功能:update:单点替换 quary:区间最值
代码:
1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 #define maxn 200100 5 #define lson l,m,rt<<1 6 #define rson m+1,r,rt<<1|1 7 int Max[maxn<<2]; 8 int MMax(int a,int b) 9 { 10 return a<b?b:a; 11 } 12 void Pushup(int rt) 13 { 14 Max[rt]=MMax(Max[rt<<1],Max[rt<<1|1]); 15 } 16 void build(int l,int r,int rt) 17 { 18 if(r==l) 19 { 20 scanf("%d",&Max[rt]); 21 return; 22 } 23 int m=(l+r)>>1; 24 build(lson); 25 build(rson); 26 Pushup(rt); 27 } 28 void update(int pos,int add,int l,int r,int rt) 29 { 30 if(r==l) 31 { 32 Max[rt]=add; 33 return; 34 } 35 int m=(l+r)>>1; 36 if(pos<=m) update(pos,add,lson); 37 else update(pos,add,rson); 38 Pushup(rt); 39 } 40 int quary(int L,int R,int l,int r,int rt) 41 { 42 if(L<=l&&R>=r) 43 return Max[rt]; 44 int m=(l+r)>>1; 45 int ret=0; 46 if(L<=m) ret=MMax(quary(L,R,lson),ret); 47 if(R>m) ret=MMax(quary(L,R,rson),ret); 48 return ret; 49 } 50 int main() 51 { 52 int m,n,a,b; 53 char ch; 54 while(~scanf("%d %d",&n,&m)) 55 { 56 build(1,n,1); 57 while(m--) 58 { 59 scanf(" %c %d %d ",&ch,&a,&b); 60 if(ch=='Q') 61 printf("%d\n",quary(a,b,1,n,1)); 62 else 63 update(a,b,1,n,1); 64 } 65 } 66 return 0; 67 }
posted on 2013-02-06 21:50 acoderworld 阅读(36) 评论(0) 收藏 举报
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET MAUI项目中绑定Android库实现硬件控制的开发经历
· 糊涂啊!这个需求居然没想到用时间轮来解决
· 浅谈为什么我讨厌分布式事务
· 在 .NET 中使用内存映射文件构建高性能的进程间通信队列
· 一个 java 空指针异常的解决过程
· 干翻 Typora!MilkUp:完全免费的桌面端 Markdown 编辑器!
· 那些年我们一起追过的Java技术,现在真的别再追了!
· 记一次.NET MAUI项目中绑定Android库实现硬件控制的开发经历
· 从WebApi迁移到Minimal API?有了这个神器,小白也能10分钟搞定!
· 抛开官方库,手撸一个轻量级 MCP 服务端