#include<cstdio>
#include<algorithm>
using namespace std;
#define MAX 10000
#define INF 2147000047 int n,m;
int minv[MAX],sumv[MAX];//附加信息
//温馨提示:这的附加信息最好开n*4的,原因自己画图推吧 int ql, qr;//查询区间
//查询[ql, qr]中的最小值
int query_min(int o, int L, int R) {
int M = (L + R) >> 1, ans = INF;
if(ql <= L && R <= qr) return minv[o]; //递归出口(当前节点完全在查询区间内)
if(ql <= M) ans = min(ans, query_min(o*2, L, M) );//往左走(查询区间在左儿子节点中有元素)
if(M < qr) ans = min(ans, query_min(o*2+1, M+1, R) );//往右走(同理
return ans;
}
//查询[ql, qr]元素和
int query_sum(int o, int L, int R) {
int M = (L + R) >> 1 , ans = 0;
if(ql <= L && R <= qr) return sumv[o];//出口
if(ql <= M) ans += query_sum(o*2, L, M);
if(qr > M) ans += query_sum(o*2+1, M+1, R);
return ans;
} int p,v;//修改A[p] = v
void update(int o, int L, int R) {
int M = (L + R) >> 1;
if(L == R) {
minv[o] = v;
sumv[o] = v;
//....
}
else {// L < R
//先递归更新左子树 或 右子树
if(p <= M) update(o*2, L, M); else update(o*2+1, M+1, R);
//然后计算本节点的附加值
minv[o] = min(minv[o*2], minv[o*2+1]);
sumv[o] = sumv[o*2] + sumv[o*2+1];
}
} int main() {
scanf("%d%d",&n,&m);
for(p = 1; p <= n; p++) {
scanf("%d", &v);
update(1, 1, n);//建树
}
//注:可以换一种建树的方法,写一个build_tree()之后一次性访问完所有节点,O(n)
//别忘了push_up
for(int i = 1; i <= 15; i++) {
printf("sumv[%d] = %d, minv[%d] = %d\n", i, sumv[i], i, minv[i]);
}
int cmd;
for(int i = 1; i <= m; i++) {
scanf("%d",&cmd);
if(cmd == 1) {
scanf("%d%d",&ql,&qr);
printf("[%d, %d]之间最小值为 %d\n",ql, qr, query_min(1, 1, n));
}
else {
scanf("%d%d",&ql, &qr);
printf("[%d, %d]之间的元素和为 %d\n",ql, qr, query_sum(1, 1, n));
}
}
return 0;
} /*
5 5
1 2 3 4 5
2 1 3
2 1 5
1 1 5
2 1 5
2 1 4
*/

线段树(1)——点修改&建树的更多相关文章

  1. hiho一下20周 线段树的区间修改

    线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题改了改,又出给了 ...

  2. poj 3468:A Simple Problem with Integers(线段树,区间修改求和)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 58269   ...

  3. hihoCode 1078 : 线段树的区间修改

    #1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...

  4. hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)

    #1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...

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

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

  6. hdu 1166 线段树(sum+单点修改)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  7. 12:Challenge 5(线段树区间直接修改)

    总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)将某连续一段同时改成一个数 ...

  8. UVa 11992 Fast Matrix Operations (线段树,区间修改)

    题意:给出一个row*col的全0矩阵,有三种操作 1 x1 y1 x2 y2 v:将x1 <= row <= x2, y1 <= col <= y2里面的点全部增加v: 2 ...

  9. hiho一下21周 线段树的区间修改 离散化

    离散化 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho ...

  10. HDU 5316 Magician (线段树,单值修改,微变形)

    题意:给一个初始序列A[1,n],第j个数字代表精灵j的power值,有两种操作:(1)查询区间[L,R] (2)修改某个精灵的power值. 但,查询的是区间[L,R]中一个美丽子序列sub[l,r ...

随机推荐

  1. 从柯洁对战AlphaGo,看商业智能

    [摘要]李开复赛前说,AlphaGo和李世石的人机大战是第一次,可能还有悬念,那今天的AlphaGo已经在围棋的世界中彻底甩开了人类,不再拥有任何其他的可能.并指出,AlphaGo和柯洁的比赛并非没有 ...

  2. C# 前一个数是后一个数的父级

    private void button2_Click(object sender, EventArgs e) { var str = "1 2 3 4 5 6 7 8 9 10 11 12 ...

  3. HTML编辑器ASP.NET

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="kindeditor.aspx. ...

  4. 【剑指Offer】3、从尾到头打印链表

      题目描述:   输入一个链表,按链表值从尾到头的顺序返回一个ArrayList.   解题思路:   (三种方法:借助栈.递归.列表的首位插入)   从头到尾打印链表比较简单,从尾到头很自然的可以 ...

  5. Cache占用过多内存导致Linux系统内存不足问题排查

    问题描述 Linux服务器内存使用量超过阈值,触发报警. 问题排查 首先,通过free命令观察系统的内存使用情况,显示如下: total used free shared buffers cached ...

  6. C#第十四节课

    函数的调用 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System ...

  7. PIPE、SIGNAL(day11)

    一.管道 管道分为两种: 无名管道 有名管道 无名管道用于具有亲缘关系的进程间通讯.无名管道是单工的. 有内核管理的一块内存空间. 使用管道,系统提供了pipe() #include <unis ...

  8. win安装配置Java8环境

    这里就不重复造轮子,搜索一下. 一堆就出来 这里就引用一个百度知道的经验 https://jingyan.baidu.com/article/48b558e3f135687f38c09a03.html ...

  9. 洛谷 P1595 信封问题

    题目描述 某人写了n封信和n个信封,如果所有的信都装错了信封.求所有信都装错信封共有多少种不同情况. 输入输出格式 输入格式: 一个信封数n 输出格式: 一个整数,代表有多少种情况. 输入输出样例 输 ...

  10. 大红数星星 图论 XD网络赛

    问题 A: 大红数星星 时间限制: 3 Sec  内存限制: 128 MB提交: 1066  解决: 67[提交][状态][讨论版] 题目描述 “三角形十分的美丽,相信大家小学就学过三角形具有稳定性, ...