hdu 1754 线段树
来源:互联网 发布:固态硬盘坏了数据恢复 编辑:程序博客网 时间:2024/05/18 13:29
#include<iostream>#include<cstdio>#define MAX 200005using namespace std;int tree[MAX*4];void build(int s,int e,int n){ if(e==s) { scanf("%d",&tree[n]); return ; } int mid=(s+e)/2; build(s,mid,2*n); build(mid+1,e,2*n+1); tree[n]=max(tree[2*n],tree[2*n+1]);}int query(int s,int e,int a,int b,int n){ if(s==a&&e==b) return tree[n]; int mid=(s+e)/2; if(b<=mid) return query(s,mid,a,b,2*n); else if(mid<a) return query(mid+1,e,a,b,2*n+1); else return max(query(s,mid,a,mid,2*n),query(mid+1,e,mid+1,b,2*n+1) );}void modify(int s,int e,int a,int b,int n){ if(s==e) { tree[n]=b ; return ; } int mid=(s+e)/2; if(a<=mid) modify(s,mid,a,b,2*n); else modify(mid+1,e,a,b,2*n+1) ; tree[n]=max(tree[2*n],tree[2*n+1]) ; // max}/*void show(int s,int e,int n){ cout<<"tree["<<n<<"]=["<<s<<","<<e<<']'<<endl; if(s==e) return ; int mid=(s+e)/2; show(s,mid,2*n); show(mid+1,e,2*n+1); }*/int main(){ int n,m,i,a,b; char c[4]; while(scanf("%d%d",&n,&m)!=EOF) { build(1,n,1); while(m--) { getchar(); scanf("%s%d%d",c,&a,&b); if(c[0]=='Q') printf("%d\n",query(1,n,a,b,1) ); else modify(1,n,a,b,1); } } return 0;}
<pre name="code" class="cpp">#include<iostream> // ac#include<cstdio>#include<cstring>using namespace std;struct line{int le,ri,n;}a[1000000]; // kai 100 0000int b[200005];int insert(int s,int e,int m) // insert 返回最大值 ==query{ if(a[m].le==s&&e==a[m].ri) return a[m].n ; int mid=(a[m].le+a[m].ri)/2; if(e<=mid&&s<=mid) return insert(s,e,2*m); else if(mid<s) return insert(s,e,2*m+1); else return max( insert(s,mid,2*m) , insert(mid+1,e,2*m+1) );}void modify(int s,int e,int m){ if(a[m].le==a[m].ri){ a[m].n=e; return ; } int mid=(a[m].le+a[m].ri)/2; if(s<=mid) modify(s,e,2*m); else modify(s,e,2*m+1); a[m].n=max( insert(a[m].le,mid,2*m) , insert(mid+1,a[m].ri,2*m+1) ) ;}void build(int s,int e,int m ){ a[m].le=s; a[m].ri=e; int mid=(s+e)/2; if(s==e) {a[m].n=b[mid]; return ;} build(s,mid,2*m); build(mid+1,e,2*m+1); a[m].n=max( a[2*m].n , a[2*m+1].n );}int main(){ int n,m,i,A,B; char C; while(scanf("%d%d",&n,&m)!=EOF) { for(i=1;i<=n;i++) scanf("%d",&b[i]); build(1,n,1); while(m--) { getchar(); scanf("%c%d%d",&C,&A,&B); // cin>>C>>A>>B; if(C=='Q') printf("%d\n",insert(A,B,1)); else modify(A,B,1); } } return 0;}
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 线段树
- 互联网思维精髓总结
- Linux查看端口使用状态、关闭端口方法
- Android在真机上调试Eclipse
- [转载]hadoop 常用命令
- 随想录(从编程语言到库、框架、软件)
- hdu 1754 线段树
- 从头开始
- uva 11885 - Number of Battlefields(矩阵快速幂)
- intrins.h 简介
- OpenGL显示图片
- EL(JSTL)表达式的操作符
- 利用聚类优化分类器
- 如何将系统模块化
- 求助 combox 改变后 datagrid 里的显示相应数据并计算及排序并去除为小于等于 0 的数据