POJ 1754 线段树
e,应该是线段树里的水题。线段树单点更新。查询区间最值。
代码套用模板 PS :模板有些地方不太懂。
#include<stdio.h>
#include<iostream>
#include<string.h>
#define maxn 200010
using namespace std;
int val[maxn];
struct Node
{
int max; // 需要求最值这里就改成最值
int left, right;
}tree[maxn*4]; // 据说。线段树节点需要是数组的3~4倍大
int max(int a, int b)
{
return a > b ? a : b;
}
int build(int root, int left, int right) // 以root为根节点 left 和 right 为数组长度的树
{
tree[root].left = left;
tree[root].right = right;
if (left == right)
return tree[root].max = val[left]; // 给叶子节点赋值
int mid = (left + right) / 2;
int a = build(2*root, left, mid); // 建立左子树和右子树
int b = build(2*root+1, mid+1, right);
return tree[root].max = max(a, b);
}
int update(int root, int pos, int val) //单点更新 把pos 位置的元素更新为val
{
if (tree[root].left == pos && tree[root].right == pos) // 如果找到了该位置对应的节点
return tree[root].max = val;
if (tree[root].left > pos || tree[root].right < pos) //如果不是。以上是两种递归突破口。e .但是我不太明白这两种情况返回值为什么是这样的。
return tree[root].max;
int a, b;
a = update(2*root, pos, val); // 更新左子树和右子树
b = update(2*root+1, pos, val);
return tree[root].max = max(a, b);
}
int calculate(int root, int left, int right) // 求取区间left 到 right中的最大值
{
if (tree[root].left > right || tree[root].right < left) // 如果当前区间和所求区间没有交集
return 0;
if (left <= tree[root].left && tree[root].right <= right) // 如果当前区间完全包含在所求区间里。不明白为什么就要返回当前区间的最大值。
return tree[root].max;
int a, b;
a = calculate(2*root, left, right); // 上述两种情况都木有的话。需要分解所求区间,求子区间的最值。
b = calculate(2*root+1, left, right);
return max(a, b);
}
int main()
{
int n, m;
while(cin >> n >> m)
{
for (int i=1; i<=n; ++i)
scanf("%d", &val[i]);
build(1, 1, n);
while(m--)
{
char temp;
int a, b;
cin >> temp >> a >> b;
if (temp == 'Q')
cout << calculate(1, a, b) << endl;
else update(1, a, b);
}
}
return 0;
}
POJ 1754 线段树的更多相关文章
- poj 2886 线段树+反素数
Who Gets the Most Candies? Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 12744 Acc ...
- hdu 1754 线段树(Max+单点修改)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU(1754),线段树,单点替换,区间最值
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 线段树模板题,update功能是单点替换,query是访问区间最大值. #include < ...
- poj 3468(线段树)
http://poj.org/problem?id=3468 题意:给n个数字,从A1 …………An m次命令,Q是查询,查询a到b的区间和,c是更新,从a到b每个值都增加x.思路:这是一个很明显的线 ...
- POJ——3264线段树
题目: 输入两个数(m,n),m表示牛的头数,n表示查询的个数.查询时输入两个数(x,y),表示查询范围的起始值和终止值,查询结果是,这个区间内牛重量的最大值减去牛重量的最小值,数量级为1000,00 ...
- POJ 2828 线段树(想法)
Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 15422 Accepted: 7684 Desc ...
- poj 2828 线段树
http://poj.org/problem?id=2828 学到的思维: 1.变化的或者后来的优先影响前面的,那么从最后一个往前看,最后一个就成了 确定的, 而且后来的也能够确定----假设从前往后 ...
- POJ - 1177 线段树
POJ - 1177 扫描线 这道题也算是一道扫描线的经典题目了. 只不过这道题是算周长,非常有意思的一道题.我们已经知道了,一般求面积并,是如何求的,现在我们要把扫描线进行改造一下,使得能算周长. ...
- poj 2886 (线段树+反素数打表) Who Gets the Most Candies?
http://poj.org/problem?id=2886 一群孩子从编号1到n按顺时针的方向围成一个圆,每个孩子手中卡片上有一个数字,首先是编号为k的孩子出去,如果他手上的数字m是正数,那么从他左 ...
随机推荐
- 20145330 《网络对抗》 Web安全基础实践
20145330 <网络对抗> Web安全基础实践 1.实验后回答问题 (1)SQL注入攻击原理,如何防御 SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字 ...
- python2.7+pyqt4 +eric4安装配置
eric4安装与汉化一直没找到合适python的IDE工具,直到遇到了eric4这款开源软件.然而在使用过程中发现输出的中文字符竟然是乱码,修修改改配置总算正常显示了,何不干脆把软件界面也汉化下. 一 ...
- linux下如何源码安装expect
1.作用 自动交互.比如如果用ssh登陆服务器,每次都输入密码,然而你觉得麻烦,那你就可以使用expect来做自动交互,这样的话就不用每次都输入密码 2.依赖 依赖tcl 3.获取源码 wget ht ...
- printf("%f\n",5);
http://zhidao.baidu.com/link?url=87OGcxtDa6fQoeKmk1KylLu4eIBLJSh7CA3n5NWY-Ipm9TxZViFnIui307duCXWhaM0 ...
- Visual Studio 项目模板制作(三)
前面,我们已经制作好了模板,然后放到相应的Template目录就可以在Visual Studio中使用 本篇,我们采用安装VSIX扩展的方式来安装模板,这种方式需要安装Visual Studio SD ...
- LCA离线算法Tarjan详解
离线算法也就是需要先把所有查询给保存下来,最后一次输出结果. 离线算法是基于并查集实现的,首先就是初始化P[i] = i. 接下来对于每个点进行dfs: ①首先判断是否有与该点有关的查询,如果当前该点 ...
- faster-rcnn 论文讲解
Faster RCN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classification ...
- Python 实现协程
协程的概念 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程.(其实并没有说明白~) 我觉得单说协程,比较抽象,如果对线程有一定了解的话,应该就比较 ...
- 使用 data.table 包操作数据
在第一节中,我们回顾了许多用于操作数据框的内置函数.然后,了解了 sqldf 扩展包,它使得简单的数据查询和统计变得更简便.然而,两种方法都有各自的局限性.使用内置函数可能既繁琐又缓慢,而相对于各式各 ...
- 页面资源缓存 html css js
html <meta http-equiv="Expires" content="0"><meta http-equiv="Prag ...