HDU 1754 I Hate It 线段树 最大值 点更新
来源:互联网 发布:星球大战顺序 知乎 编辑:程序博客网 时间:2024/05/16 01:28
原题: http://acm.hdu.edu.cn/showproblem.php?pid=1754
题目:
I Hate It
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 51626 Accepted Submission(s): 20227
Problem Description
很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
Input
本题目包含多组测试,请处理到文件结束。
在每个测试的第一行,有两个正整数 N 和 M ( 0
思路:
每次做的时候注意数组大小,还有想清楚查询函数的递归式里为什么不用更新l,r的值。注意递归的终点一定要可预料,否则跳不出递归。
代码:
#include <iostream>#include"cstdio"#include"string.h"#include"stdlib.h"using namespace std;const int N = 200050;struct node{ int l; int r; int maxn;};node tree[N*4];int a[N];void build(int id,int l,int r){ tree[id].l=l; tree[id].r=r; if(l==r) { tree[id].maxn=a[l]; } else { int mid=(l+r)/2; build(id*2,l,mid); build(id*2+1,mid+1,r); tree[id].maxn=max(tree[id*2].maxn,tree[id*2+1].maxn); }}void update(int id,int pos,int val){ if(tree[id].l==tree[id].r) { tree[id].maxn=val; } else { int mid=(tree[id].l+tree[id].r)/2; if(pos<=mid) update(id*2,pos,val); else update(id*2+1,pos,val); tree[id].maxn=max(tree[id*2].maxn,tree[id*2+1].maxn); }}int Find(int id,int l,int r){ if(tree[id].l>=l&&tree[id].r<=r) return tree[id].maxn; else { int mid=(tree[id].l+tree[id].r)/2; int ans=0; if(l<=mid) ans=max(ans,Find(id*2,l,r)); if(r>mid) ans=max(ans,Find(id*2+1,l,r)); return ans; }}void init(){ memset(a,0,sizeof(a)); memset(tree,0,sizeof(tree));}int main(){ init(); int n,m; while(scanf("%d %d",&n,&m)!=EOF) { for(int j=1; j<=n; j++) { scanf("%d",&a[j]); } build(1,1,n); char s[10]; for(int j=0; j<m; j++) { scanf("%s",s); if(s[0]=='Q') { int p,q; scanf("%d %d",&p,&q); printf("%d\n",Find(1,p,q)); } else if(s[0]=='U') { int p,q; scanf("%d %d",&p,&q); update(1,p,q); } } } return 0;}
0 0
- HDU 1754 I Hate It 线段树 最大值 点更新
- hdu 1754 I Hate It(线段树 点更新 最大值)
- HDU--I Hate It (线段树求最大值加更新)
- 线段树(区间最大值查询和点修改)——I Hate It ( HDU 1754 )
- 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 (线段树最大值模板)
- 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 线段树 单点修改、最大值
- oracle创建表空间和用户
- enum类型
- SpringMvc下载excel文件
- C#里边的控件缩写大全
- js事件驱动
- HDU 1754 I Hate It 线段树 最大值 点更新
- 椭圆拟合算法总结
- CentOS6.5安装Redis2.8.19
- 配置LVM(逻辑卷管理)
- POJ 2251:Dungeon Master
- hdu 5335 Walk Out
- JS闭包理解
- 搭建高可用MongoDB集群 副本
- MySQL数据库中删除重复记录的方法总结(转载)