题目大意:给你一些水源,让你求给定区间当中的最大值。
算法思想:线段树求区间最大。
#include<iostream> #include<cstdio> using namespace std; typedef struct Node { int value; int l; int r; }; Node tree[1050*4]; int a[10050]; void build_tree(int v,int l,int r) { tree[v].l=l; tree[v].r=r; if(l==r) { tree[v].value=a[l]; return; } else { int mid=(l+r)/2; build_tree(v*2,l,mid); build_tree(v*2+1,mid+1,r); tree[v].value=max(tree[v*2].value,tree[v*2+1].value); } } int query(int v,int l,int r) { if(tree[v].l==l&&tree[v].r==r) { return tree[v].value; } int mid=(tree[v].l+tree[v].r)/2; if(r<=mid) { query(v*2,l,r); } else { if(l>mid) query(v*2+1,l,r); else { int max1=query(v*2,l,mid); int max2=query(v*2+1,mid+1,r); return max(max1,max2); } } } void update(int v,int add,int p) { if(tree[v].l==tree[v].r) { tree[v].value+=add; return; } int mid=(tree[v].l+tree[v].r)/2; if(p<=mid) update(v*2,add,p); else update(v*2+1,add,p); tree[v].value=tree[v*2].value+tree[v*2+1].value; } int t,n,q; int main() { scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } build_tree(1,1,n); scanf("%d",&q); int l,r; for(int i=1;i<=q;i++) { scanf("%d%d",&l,&r); int ans=query(1,l,r); printf("%d\n",ans); } } return 0; }
相关推荐
标题与描述均提到了“hdu 1166线段树”,这表明文章的核心是关于线段树在解决特定问题中的应用。线段树是一种数据结构,主要用于处理区间查询和更新操作,尤其是在大规模数据集上。在本例中,通过分析给定的部分代码...
线段树的主要应用是解决区间问题,例如区间和、区间最大值、区间最小值等。线段树可以将这些问题的时间复杂度从 O(n) 降低到 O(logn)。 Hdu 2871 Memory Control Hdu 2871 Memory Control 是一个典型的线段树...
线段树是一种二叉树数据结构,常用于处理区间查询或区间更新的问题。它将一个线性序列分割成多个不连续的段,每一个节点代表一个区间,并且通过递归的方式将这些区间进一步分割为更小的子区间,直到每个叶子节点代表...
线段树是一种数据结构,主要用于高效地处理区间查询与修改问题。在计算机科学中,它在动态规划、算法竞赛等领域有着广泛的应用。这篇博客“线段树入门学习(兼解HDU1754)”旨在帮助初学者理解线段树的基本概念,并...
这是一个经典的线段树应用问题,通过线段树维护每个区间的最大值。在查询区间最大值时,只需遍历对应的线段树节点即可快速得到结果。 - **HDU 1166**:求区间和。同样也是经典的应用场景,线段树维护每个区间的和。...
- **实现**:构建线段树时,除了支持区间最大值的查询外,还需要支持单点替换操作。 通过以上分析可以看出,线段树作为一种高效的数据结构,在处理区间相关问题时具有很强的实用性。同时,随着作者经验的增长和...
【hdu5306】Gorgeous Sequence 线段树区间最值操作-附件资源
在这个问题中,线段树的每个节点存储的信息不仅仅是区间内的和,而是区间内不同数字的和。线段树的每个节点包含以下信息: 1. `a` 和 `b`:表示节点覆盖的区间左边界和右边界。 2. `value`:表示在区间 `[a, b]` 内...
线段树在处理动态区间问题时非常有效,如在数组上进行区间加法、区间求和等操作。理解和熟练运用线段树是解决复杂数据结构题目的关键。 3. **字符串处理**:字符串是编程中常见的数据类型,用于处理文本信息。字符...
6. **数据结构**:线段树、斐波那契堆、平衡树(AVL、红黑树)、字典树(Trie)、并查集等,这些高级数据结构可以高效地解决区间查询、维护、集合操作等问题。 7. **几何算法**:二维和三维几何问题,如点线面的...
通过在线段树中进行查询和更新,我们可以解决区间问题。 十一、博弈、树形dp 在多个题目中,我们学习了博弈、树形dp的应用。博弈、树形dp是一种动态规划算法,用于解决游戏相关的问题。通过定义状态转移方程式,...
在该文件中,线段树是一个典型的线段树问题,要求使用线段树来解决区间查询问题。解题时需要熟悉线段树的定义和性质,并了解其应用场景。 11. KMP(2) : KMP(2) 是一个典型的 KMP 算法问题,要求使用 KMP 算法来...
相较于其他数据结构如线段树,树状数组在实现上更为简洁,并且在实际应用中往往具有较好的常数因子。 - **查询和修改复杂度**:树状数组支持在`O(log n)`时间内完成区间查询和单点更新操作。 - **应用场景**:树状...
【总模板_lsy_WF[2015-04-16]1...RMQ常用于数据结构优化,例如线段树、斐波那契堆等,以快速响应区间查询。 综上所述,这份模板涵盖了ACM-ICPC竞赛中图论部分的重要算法,对于理解和解决实际问题有着重要的指导价值。
而`hdoj`可能指的是HDU(杭州电子科技大学)在线判题系统的题目,这些题目涵盖了各种ACM算法,可以作为练习和检验理解的平台。 总之,这个资源包是学习和提升ACM算法技能的理想材料,通过深入学习和实践,你可以...