hdu1754
来源:互联网 发布:单片机软件工程师要求 编辑:程序博客网 时间:2024/05/18 20:07
线段树单点更新,找出区间最大值和更改区间点的值。
#include<stdio.h>#include<string.h>#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define max 200010int N,M;int sum[max<<2];int Max(int a,int b){ return a>b?a:b;}void PushUp(int rt){ sum[rt]=Max(sum[rt<<1],sum[rt<<1|1]);}void build(int l,int r,int rt){ if(l==r) { scanf("%d",&sum[rt]); return ; } int m=(l+r)>>1; build(lson); build(rson); PushUp(rt);}int query(int L,int R,int l,int r,int rt){ if(l>=L&&r<=R) { return sum[rt]; } int maxn=0; int m=(l+r)>>1; if(L<=m) maxn=Max(maxn,query(L,R,lson)); if(R>m) maxn=Max(maxn,query(L,R,rson)); return maxn;}void update(int L,int num,int l,int r,int rt){ if(r==l) { sum[rt]=num; return ; } int m=(l+r)>>1; if(L<=m) update(L,num,lson); else update(L,num,rson); PushUp(rt);}int main(){ char op[2]; int A,B; while(scanf("%d%d",&N,&M)!=EOF) { memset(sum,0,sizeof(sum)); build(1,N,1); for(int i=0;i<M;i++) { scanf("%s%d%d",op,&A,&B); if(op[0]=='Q') { printf("%d\n",query(A,B,1,N,1)); } else { update(A,B,1,N,1); } } } return 0;}
- hdu1754
- hdu1754
- hdu1754
- hdu1754
- HDU1754
- hdu1754
- HDU1754
- HDU1754
- hdu1754
- hdu1754
- HDU1754
- hdu1754
- hdu1754
- hdu1754
- hdu1754
- hdu1754
- hdu1754
- HDU1754
- 网页实现多文件下载,貌似不行。这里有一篇相关的文章
- 【Codeigniter-Upload类】上传zip/rar文件
- hdu1166
- “善用Google”整理
- 验证log4j.xml时不能找到log4j.dtd
- hdu1754
- 数据结构:AVL树(平衡二叉树)
- error C2977: “std::tuple”: 模板参数太多 的解决办法
- typedef使用详解
- Hbase分析报告(tablename+startrowkey_regionid/-meta-)
- 集成声卡和独立声卡哪个的性能好些
- ABAP 获取 状态的两个函数 STATUS_TEXT_EDIT 和 STATUS_READ 的简单介绍
- Autotools
- HTML5的新特性的探讨