hdu1754 I Hate It
2012-08-10 11:00
309 查看
#include<cstdio> #include<cmath> #include<iostream> #define MAX 200010 using namespace std; struct node{ int l,r; int max; }tree[3*MAX];//三倍就差不多了 int s[MAX]; void build(int l,int r,int i)//负责建树 { tree[i].l=l; tree[i].r=r; if(l==r){ tree[i].max=s[l]; return; } int mid=(l+r)>>1;//用位运算符效率要高点,还有加法要比乘法效率高 build(l,mid,i<<1); build(mid+1,r,(i<<1)+1); tree[i].max=max(tree[i<<1].max,tree[(i<<1)+1].max);//回归的过程中把每一段的最大值带回 } void update(int order,int data,int i)//修改节点order的数据为data { if(tree[i].l==order&&tree[i].r==order){//找到此节点的话,直接返修改 tree[i].max=data; return; } int mid=(tree[i].l+tree[i].r)>>1; if(order<=mid) update(order,data,i<<1);//否则查找其在左子树还是右子树上 else update(order,data,(i<<1)+1); tree[i].max=max(tree[i<<1].max,tree[(i<<1)+1].max);//回归更新max域 } int query(int l,int r,int i)//查询l~r间的最大值 { if(tree[i].l==l&&tree[i].r==r) return tree[i].max;//找到节点,直接返回max值 int mid=(tree[i].l+tree[i].r)>>1; if(r<=mid) return query(l,r,i<<1);//如果r<mid则待查段在左子树上 else if(l>mid) return query(l,r,(i<<1)+1);//如果l>mid则待查段在左子树上 else return max(query(l,mid,i<<1),query(mid+1,r,(i<<1)+1));//否则左右子树均有,则左右子树均要查找,并返回两者中的较大值 } int main() { int N,M,i,a,b; char c; while(~scanf("%d%d",&N,&M)){ for(i=1;i<=N;++i) scanf("%d",&s[i]); build(1,N,1); while(M--){ scanf("%*c%c%d%d",&c,&a,&b); if(c=='Q') printf("%d\n",query(a,b,1)); else update(a,b,1); } } return 0; }
Accepted | 1754 | 500MS | 7200K | 1232 B | C++ |
相关文章推荐
- hdu1754 I Hate It,线段树
- HDU 1754 I hate it 分段树Segment Tree题解
- HDU 1754 I Hate It【线段树 单点更新】
- hdu 1754 I Hate It (线段树--求区间最大值)(基础)
- hdu-1754 I Hate It【线段树求区间最大值】
- hdu 1754 I Hate It 线段树单点更新
- HDU 1754 I hate it 线段树的应用
- HDU 1754 I Hate It (线段树,模板)
- I Hate It(hdu 1754)
- HDU—1754—I_Hate_It—【数据结构】【线段树】【单点更新】
- HDU 1754 B I Hate It 线段树 单点更新 区间最大值 模板
- HDU1754 I Hate It (分块入门)
- 【HDU 1754】I Hate It —— 线段树(数组和指针实现)
- HDU 1754 I Hate It 线段树RMQ
- HDU 1754 - I Hate It - Segment Tree
- HDU-1754 I Hate It 线段树 链式
- HDU-1754-I Hate It【线段树求区间最值】
- HDU 1754 I Hate It 伸展树
- HDU 1754 I Hate It (线段树:单点替换求最值)
- hdu 1754 I Hate It 线段树单点更新区间查询