hdu 1754 线段树模板题
2013-07-27 15:39
225 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754
View Code
#include <cstdio> #include <cmath> #include <algorithm> #include <iostream> #include <cstring> #include <queue> #include <vector> #define maxn 230050 #define lson l,mid,u<<1 #define rson mid+1,r,u<<1|1 using namespace std; const int INF = 0x3f3f3f; int seg[maxn<<2]; int Push_UP(int u){ seg[u] = max(seg[u<<1],seg[u<<1|1]); //****这个地方 u<<1|1 不能换为 u << 1 +1 } void build(int l,int r,int u){ if(l == r){ scanf("%d",&seg[u]); return; } int mid = (l + r)/2; build(lson); build(rson); Push_UP(u); } void Update(int loc,int num,int l,int r,int u){ if(l == r){ // 这个地方要注意!! seg[u] = num; return; } int mid = (l + r)/2; if(loc <= mid) Update(loc,num,lson); else Update(loc,num,rson); Push_UP(u); } int Query(int L,int R,int l,int r,int u){ if(L <= l && r <= R){ return seg[u]; } int ret = 0; int mid = (l + r)/2; if(L <= mid) ret =max(ret,Query(L,R,lson)); if(R > mid) ret =max(ret,Query(L,R,rson)); return ret; } int main() { if(freopen("input.txt","r",stdin)== NULL) {printf("Error\n"); exit(0);} int N,M; while(cin>>N>>M){ build(1,N,1); while(M--){ char query[2]; int l,r; scanf("%s%d%d",query,&l,&r); if(query[0] == 'U') Update(l,r,1,N,1); else{ int ans = Query(l,r,1,N,1); printf("%d\n",ans); } } } }
View Code
相关文章推荐
- HDU 1754 B I Hate It 线段树 单点更新 区间最大值 模板
- HDU 1754 线段树模板
- HDU 1754 B I Hate It 线段树 单点更新 区间最大值 模板
- hdu 1754 I Hate It【线段树入门+模板详解】
- HDU 1754 B I Hate It 线段树 单点更新 区间最大值 模板
- HDU 1754 I Hate It (线段树,模板)
- hdu 1754 I Hate It (模板线段树)
- HDU 1754 B I Hate It 线段树 单点更新 区间最大值 模板
- HDU 1754 I Hate it (线段树最大值模板)
- hdu_1754_线段树模板题
- HDU 1754 B I Hate It 线段树 单点更新 区间最大值 模板
- HDU 1754 B I Hate It 线段树 单点更新 区间最大值 模板
- HDU 1754 B I Hate It 线段树 单点更新 区间最大值 模板
- 模板(线段树 + 树状数组 + 单点查询 + 区间查询)eg:HDU 1754 - I Hate It
- HDU 1754 B I Hate It 线段树 单点更新 区间最大值 模板
- HDU-1754 I Hate It (线段树裸题 splay模板 单点修改 区间询问最大值)
- HDU 1754 I Hate It (线段树模板题)
- 题集+模板:线段树[1]点修改 区间查找 hdu 2795+1394+1754+4302
- HDU 1754 I Hate It(线段树-水题,模板题)
- hdu 1754 线段树