I Hate It---hdu1754线段树
2024-09-21 06:01:22
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1754
和上一题一样是模板题,就是那道题求得是和,这道求得是最大值:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<queue> using namespace std; #define N 201000
#define INF 0xfffffff
#define Lson r<<1
#define Rson r<<1|1 struct Segment
{
int L, R, Max;
int Mid()
{
return (L+R)>>;
}
} a[N<<]; void BuildTree(int r, int L, int R)
{
a[r].L = L;
a[r].R = R;
if(L == R)
{
scanf("%d", &a[r].Max);
return ;
}
BuildTree(Lson, L, a[r].Mid());
BuildTree(Rson, a[r].Mid()+, R); a[r].Max = max(a[Lson].Max, a[Rson].Max);
}
int Query(int r, int L, int R)
{
if(a[r].L == L && a[r].R == R)
return a[r].Max;
if(L > a[r].Mid())
return Query(Rson, L, R);
else if(R <= a[r].Mid())
return Query(Lson, L, R);
else
{
int Max1 = Query(Lson, L, a[r].Mid());
int Max2 = Query(Rson, a[r].Mid()+, R);
return max(Max1 , Max2);
}
}
void Update(int r, int p, int x)
{
if(a[r].L == p && a[r].R == p)
{
a[r].Max = x;
return ;
}
if(p > a[r].Mid())
Update(Rson, p, x);
else
Update(Lson, p, x); a[r].Max = max(a[Rson].Max, a[Lson].Max);
}
int main()
{
int n, m, a, b;
char s[];
while(scanf("%d%d",&n, &m) != EOF)
{
BuildTree(, , n);
for(int i=; i<m; i++)
{
scanf("%s%d%d", s, &a, &b);
if(s[] == 'Q')
printf("%d\n", Query(, a, b));
else
Update(, a, b);
}
}
return ;
}
最新文章
- [机器学习] Ubuntu 软件源更新(校园网)以及问题总结
- Ansible-Tower快速入门-4.以超级用户帐号登录【翻译】
- LeetCode题解-----First Missing Positive
- 护眼色的RGB值
- gif修改背景透明
- [Node.js] Exporting Modules in Node
- Android中使用ListView绘制自定义表格(2)
- Linux系统编程(5)——文件与IO之mmap函数
- [推荐] 查看网站使用的JS框架
- 解读web服务器与php的工作原理
- jsp的语法
- logback日志丢失的情况之一
- Android开发入门经典实例
- n个随机变量中第k小值的期望
- 11.8java课后动手动脑
- Scala的高级特性
- linux进程的几个状态
- rvm的安装, 使用rvm, 安装ruby, 以及gem的使用 (转)
- activiti学习-用户与用户组
- /proc/sys 子目录的作用