hdu 1754 I Hate It (线段树)
2014-11-07 12:22
295 查看
传送门:点击打开链接
题目大意:
线段树入门题。
两种操作:
1. 区间查询最大值。
2. 单点修改。
题目大意:
线段树入门题。
两种操作:
1. 区间查询最大值。
2. 单点修改。
#include <cstdio> #define maxn 200010 struct Node { int l,r,ma; }tree[maxn<<2]; inline int max(int a,int b) { return a>b?a:b; } inline void pushup(int id) { tree[id].ma = max(tree[id<<1].ma,tree[id<<1|1].ma); } void build(int id,int l,int r) { tree[id].l = l; tree[id].r = r; if(l == r) { int x; scanf("%d",&x); tree[id].ma = x; return; } int mid = (l+r)>>1; build(id<<1,l,mid); build(id<<1|1,mid+1,r); pushup(id); } int query(int id,int l,int r) { if(tree[id].l >= l && tree[id].r <= r) { return tree[id].ma; } int mid = (tree[id].l+tree[id].r )>>1; int res = 0x80808080; if(l <= mid) res = max(res,query(id<<1,l,r)); if(r > mid) res = max(res,query(id<<1|1,l,r)); return res; } void update(int id,int pos,int x) { if(tree[id].l == tree[id].r) { tree[id].ma = x; return; } int mid = (tree[id].l + tree[id].r)>>1; if(pos <= mid) update(id<<1,pos,x); else update(id<<1|1,pos,x); pushup(id); } int main() { int n,m; while(scanf("%d %d",&n,&m) != EOF) { build(1,1,n); while(m--) { char a[10]; scanf("%s",a); if(a[0] == 'Q') { int l,r; scanf("%d %d",&l,&r); printf("%d\n",query(1,l,r)); } else { int pos,x; scanf("%d %d",&pos,&x); update(1,pos,x); } } } return 0; }
相关文章推荐
- 【解题报告】 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(线段树入门)
- hdu 1754 I Hate It(线段树)
- HDU1754 I Hate It(树状数组 or 线段树)
- 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(线段树) 2984MS水过
- hdu 1754 (线段树)I Hate It
- hdu1754_I Hate It(线段树)
- hdu - 1754 - I Hate It(线段树(单点更新))
- HDU 1754 I Hate It(线段树区间求最值)
- HDU--1754 -- I Hate It [线段树]
- 线段树专辑——hdu 1754 I Hate It