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 线段树的更多相关文章

  1. poj 2886 线段树+反素数

    Who Gets the Most Candies? Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 12744   Acc ...

  2. hdu 1754 线段树(Max+单点修改)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. HDU(1754),线段树,单点替换,区间最值

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 线段树模板题,update功能是单点替换,query是访问区间最大值. #include < ...

  4. poj 3468(线段树)

    http://poj.org/problem?id=3468 题意:给n个数字,从A1 …………An m次命令,Q是查询,查询a到b的区间和,c是更新,从a到b每个值都增加x.思路:这是一个很明显的线 ...

  5. POJ——3264线段树

    题目: 输入两个数(m,n),m表示牛的头数,n表示查询的个数.查询时输入两个数(x,y),表示查询范围的起始值和终止值,查询结果是,这个区间内牛重量的最大值减去牛重量的最小值,数量级为1000,00 ...

  6. POJ 2828 线段树(想法)

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 15422   Accepted: 7684 Desc ...

  7. poj 2828 线段树

    http://poj.org/problem?id=2828 学到的思维: 1.变化的或者后来的优先影响前面的,那么从最后一个往前看,最后一个就成了 确定的, 而且后来的也能够确定----假设从前往后 ...

  8. POJ - 1177 线段树

    POJ - 1177 扫描线 这道题也算是一道扫描线的经典题目了. 只不过这道题是算周长,非常有意思的一道题.我们已经知道了,一般求面积并,是如何求的,现在我们要把扫描线进行改造一下,使得能算周长. ...

  9. poj 2886 (线段树+反素数打表) Who Gets the Most Candies?

    http://poj.org/problem?id=2886 一群孩子从编号1到n按顺时针的方向围成一个圆,每个孩子手中卡片上有一个数字,首先是编号为k的孩子出去,如果他手上的数字m是正数,那么从他左 ...

随机推荐

  1. 20145122 《Java程序设计》第8周学习总结

    教材学习内容总结 1.NIO使用频道(channel)来衔接数据节点,对数据区的标记提供了clear(),rewind(),flip(),compact()等高级操作. 2.想要取得channel的操 ...

  2. 20135234mqy-——信息安全系统设计基础第二周学习总结

    Linux基础 1.Linux命令 command [options] [arguments] //中括号代表是可选的,即有些命令不需要选项也不需要参数 选项(options)或参数(argument ...

  3. 《网络对抗》——逆向及Bof基础实践

    <网络对抗>--逆向及Bof基础实践 原理 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 手工修改可执行文件,改变程序执行流程,直接跳转到g ...

  4. cogs 330. [NOI2003] 文本编辑器

    ★★★   输入文件:editor2003.in   输出文件:editor2003.out   简单对比 时间限制:2 s   内存限制:128 MB [问题描述] 很久很久以前,DOS3.x的程序 ...

  5. Package.json 属性说明

    name - 包名. version - 包的版本号. description - 包的描述. entry pointer 项目入口文件 没有的直接回车跳过 test command: 测试命令 后面 ...

  6. 在django restful framework中设置django model的property

    众所周知,在django的model中,可以某些字段设置@property和setter deleter getter,这样就可以在存入数据的时候进行一些操作,具体原理请参见廖雪峰大神的博客https ...

  7. Mui --- 学习笔记

    1.mui 是选择器,popover 控制显示与隐藏,toggle 自动控制显示或隐藏 function showMenu(){ //mui是选择器 mui('#menu').popover('tog ...

  8. vuex到底是个啥

    vuex总结 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue 的 ...

  9. 利用JSP中的过滤器解决中文乱码问题

    首先我们创建过过滤器: package com.gbx; import java.io.IOException; import javax.servlet.Filter; import javax.s ...

  10. Cocos2d-x学习笔记(十)CC_CALLBACK回调函数相关宏

    这里加入一个插曲,是关于Cocos2d-x回调函数的.首先,让我们Cocos支持的回调函数宏有哪些,以及其原型: // new callbacks based on C++11 #define CC_ ...