hdu 1754(线段树)
来源:互联网 发布:子弹 知乎 编辑:程序博客网 时间:2024/05/26 12:01
做了hdu 1166 后,这道题目只要稍稍修改一下就可以了。
不过在一直卡在一个小bug 里面, 花了好长的时间
time 840ms
#include <iostream>#include <stdio.h>using namespace std;const int N=20005;int Max[N<<2];int max(int a,int b){return a>b?a:b ;}void push_up(int rt){ Max[rt]=max(Max[rt<<1],Max[rt<<1|1]);}void build(int l,int r,int rt){ if(l==r) { scanf("%d",&Max[rt]); return ; } int m=(l+r)>>1; build(l,m,rt<<1); build(m+1,r,rt<<1|1); push_up(rt);}void updata(int l,int r,int rt,int pos,int v){ if(l==r) { Max[rt]=v; return ; } int m=(l+r)>>1; if(pos<=m) updata(l,m,rt<<1,pos,v); else updata(m+1,r,rt<<1|1,pos,v); push_up(rt);}int query(int l,int r,int rt,int L,int R){ if(L<=l&&R>=r) { return Max[rt]; } int m=(l+r)>>1; int ret=0; if(L<=m) ret=max(ret,query(l,m,rt<<1,L,R)); if(R>m) ret=max(ret,query(m+1,r,rt<<1|1,L,R)); return ret;}int main(){ int n,m; while(~scanf("%d%d",&n,&m)) { build(1,n,1); while(m--) { int a,b; char op[2]; scanf("%s%d%d",op,&a,&b); if(op[0]=='Q') printf("%d\n",query(1,n,1,a,b)); else updata(1,n,1,a,b); } }}
zkw 线段树做法
time 561ms
#include <iostream>#include <stdio.h>#include <string.h>#include <memory.h>using namespace std;const int N=200005;int T[N<<2],M;void push_up(int rt){ T[rt]=max(T[rt<<1],T[rt<<1|1]);}void build(int n){ for(M=1;M<=n+1;M<<=1); for(int i=M+1;i<=M+n;i++) scanf("%d",&T[i]); for(int i=M-1;i>0;i--) push_up(i);}void updata(int n,int v){ for(T[n+=M]=v,n>>=1;n;n>>=1) push_up(n);}int query(int s,int t){ int ans=-1; for(s=s+M-1,t=t+M+1;s^t^1;s>>=1,t>>=1) { if(~s&1) ans=max(ans,T[s^1]); if( t&1) ans=max(ans,T[t^1]); } return ans;}int main(){ char op[2]; int n,m,a,b; while(~scanf("%d%d",&n,&m)) { memset(T,0,sizeof(T)); build(n); while(m--) { scanf("%s%d%d",op,&a,&b); if(op[0]=='U') updata(a,b); else printf("%d\n",query(a,b)); } }}
0 0
- hdu 1754 (线段树)
- 线段树(hdu 1754)
- hdu 1754(线段树)
- HDU 1754 (线段树)
- hdu 1754 线段树
- hdu 1754 线段树
- hdu 1754 线段树
- 【线段树】hdu 1754
- hdu 1754 线段树
- hdu 1754 线段树
- hdu 1754 线段树
- hdu 1754 线段树
- HDU 1754 线段树
- HDU -1754线段树
- HDU 1754 线段树
- hdu 1754 线段树
- hdu 1754 线段树
- HDU 1754 线段树
- 多个TextView同时实现走马灯效果
- contiki与ucos
- Dropping Balls
- pat1052 Linked List Sorting
- Swift UI专项训练2 本地化及自动布局
- hdu 1754(线段树)
- QML处理xml---查询含命名空间的节点
- 年轻
- File_IO
- 百度验证码识别
- Guess_number
- JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载
- linux内核配置编译以及启动概述
- code first 迁移规则