I Hate it-HDU1754 点修改+区间最大值
2024-09-04 16:39:50
题意:
很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。不管你喜不喜欢,
现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1754
思路:
基本的线段树点修改+查询区间最大值
代码:
#include <bits/stdc++.h>
using namespace std;
const int MAXN=2e5+;
int tree[MAXN<<];int a[MAXN];
void push_up(int node)
{
tree[node]=max(tree[node<<],tree[node<<|]);
}
void build(int node,int l,int r)
{
if(l==r)
{
tree[node]=a[l];return;
}
int mid=(l+r)>>;
build(node<<,l,mid);
build(node<<|,mid+,r);
push_up(node);
}
void update(int node,int l,int r,int i,int k)
{
int mid=(l+r)>>;
if(l==r)
{
a[l]=k;tree[node]=k;
return;
}
if(i<=mid)
update(node<<,l,mid,i,k);
else
update(node<<|,mid+,r,i,k);
push_up(node);
}
int query(int node,int l,int r,int x,int y)
{
if(x<=l&&y>=r)
{
return tree[node];
}
int res=;
int mid=(l+r)>>;
if(x<=mid)
res=max(res,query(node<<,l,mid,x,y));
if(y>mid)
res=max(res,query(node<<|,mid+,r,x,y));
return res;
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
build(,,n);
for(int i=;i<=m;i++)
{
char str[];
scanf("%s",str);
int x,y;
if(str[]=='Q')
{
scanf("%d%d",&x,&y);
printf("%d\n",query(,,n,x,y));
}
else
{
scanf("%d%d",&x,&y);
update(,,n,x,y);
}
}
}
return ;
}
最新文章
- 卸载Centos自带open-jdk
- selenium 关于富文本的处理
- 【洛谷P2737】Beef McNuggets
- 30 分钟快快乐乐学 SQL Performance Tuning
- 重定向redirect与跳转forward区别
- 在 Fedora 里安装自带的 MATE和 cinnamon
- 外部div自适应内部标签的高度,设置最小高度、最大高度
- SRM 409(1-250pt, 1-500pt)
- ok6410 u-boot-2012.04.01移植六完善MLC NAND支持
- 12个用得着的JQuery代码片段
- C 小写字母编程大写并输出
- Python创建多进程,用Queue传递信息
- IE兼容问题及处理
- 自定义MySQL函数
- Pycharm配置Git和Github
- MySQL数据库权限体系介绍
- pyenv+virtual 笔记
- CSS3新特性,兼容性,兼容方法总结
- [git]git版本管理学习记录
- HDU 3681 Prison Break (二分 + bfs + TSP)