hdu 1754
2013-07-29 14:30
393 查看
基础题目
#include <iostream> #include <cstdio> #include <algorithm> const int maxn = 210000; using namespace std; int st[maxn << 2]; inline void GetMax(int rt) { st[rt] = max(st[rt << 1],st[rt << 1 | 1]); } void BuildTree(int rt, int l, int r){ if(l == r){ scanf("%d",&st[rt]); return ; } int mid = (l + r) >> 1; BuildTree(rt << 1, l, mid); BuildTree(rt << 1 | 1, mid + 1, r); GetMax(rt); } void Update(int a, int b,int rt, int l, int r){ if( l == r){ st[rt] = b; return ; } int mid = (l + r) >> 1; if(a <= mid) Update( a, b, rt << 1, l, mid); else Update( a, b, rt << 1 | 1, mid + 1, r); GetMax(rt); } int Query(int a, int b, int rt, int l, int r){ if(a <= l && r <= b) return st[rt]; int mid = (l + r) >> 1; int Max = -999999999; if(a <= mid ) Max = max( Max, Query( a, b, rt << 1, l, mid)); if(b > mid ) Max = max( Max, Query( a, b, rt << 1 |1 ,mid + 1, r)); return Max; } int main() { int n,m; while(~scanf("%d %d",&n,&m)){ BuildTree(1,1,n); char s[2]; int x,y; for(int i = 1; i <= m; ++i){ scanf("%s %d %d",s,&x,&y); if(s[0] == 'Q') printf("%d\n",Query( x, y, 1, 1, n)); else Update( x, y, 1, 1, n); } } return 0; }
相关文章推荐
- hdu 1754 I Hate It
- HDU 1754
- hdu 1754
- HDU-1754 I hate it (裸线段树)
- hdu 1754 I Hate It(线段树)
- hdu 1754
- hdu 1754 I hate it - 线段树
- HDU 1754 I Hate It
- Hdu1754
- hdu1754 I Hate It
- hdu 1754 I Hate It
- HDU1754 I Hate It(线段树单点更新)
- hdu 1754 I Hate It 线段树
- HDU 1754 I Hate It
- HDU 1754(线段树入门)
- hdu 1754 I Hate It 解题报告(线段树 代码+注释)
- HDU - 1754 I Hate It —— 点更新 区间查询
- HDU 1754 - I Hate It
- 基础题之线段树小结(hdu-1754)
- HDU 1754 I Hate It(线段树求max)