/*
线段树学习:如果一个节点为i,那么他的左孩子为2I+1,右孩子为2i+2;
*/ #include<stdio.h>
#define min(a,b) a<b?a:b;
int tree[];
int a[] = {,,,,,};
//创建树
void create(int root, int c[], int start, int end) {//root表示当前线段树下标
//a表示用来构造线段树的数组
//star表示数组起始位置
//end表示数组末尾位置
if (start == end) {
//叶子节点
tree[root] = c[start];
}
else {
int mid = (start + end) / ;
create(root * + , a, start, mid);//构造左子树
create(root * + , a, mid+, end);//构造右子树
tree[root] = min(tree[root * + ], tree[root * + ]);//节点保存最小值
} } //线段树区间查询,查询最小值 int find(int root, int starti, int endi, int start, int end) {
if (starti > end || endi < start) {
return ;//无法查询到
}
if (starti <=start&&endi >= end) {
return tree[root];
}
int mid = (start + end) / ;
return min(find(root * + , starti, endi, start, mid),find(root*+,starti,endi,mid+,end)); } //节点更新,节点的更新势必会影响到其父节点的更新,所以更新了节点之后还得更新其父节点 void update(int root, int start, int end, int index, int num) {
//root表示树状数组根节点下标
//start区间其实下标
//end区间结尾下标
//index需要更新的结点在原数组中的的下标
//num更新的数值,假设加上num
if (start == end) {
//叶子节点
if (start == index) {
//判断是否是需要跟新的结点
tree[root] += num;
}
}
else {
int mid = (start + end) / ;
if (index <= mid) {
//二分,如果小于mid则只在左子树查找
update(root * + , start, mid, index, num);
}
else {
update(root * + , mid + , end, index, num);
}
tree[root] = min(tree[root * + ], tree[root * + ]);
}
} int main() {
create(, a, ,);
int x, y;
int index, number;
//情书如你要跟新的坐标和数值
scanf("%d %d", &index, &number);
update(, , , index, number);
while (~scanf("%d %d", &x, &y)) {
printf("%d\n", find(, x, y, ,));
} return ;
}

线段树学习----C语言的更多相关文章

  1. zkw线段树学习笔记

    zkw线段树学习笔记 今天模拟赛线段树被卡常了,由于我自带常数 \(buff\),所以学了下zkw线段树. 平常的线段树无论是修改还是查询,都是从根开始递归找到区间的,而zkw线段树直接从叶子结点开始 ...

  2. 线段树学习笔记(基础&进阶)(一) | P3372 【模板】线段树 1 题解

    什么是线段树 线段树是一棵二叉树,每个结点存储需维护的信息,一般用于处理区间最值.区间和等问题. 线段树的用处 对编号连续的一些点进行修改或者统计操作,修改和统计的复杂度都是 O(log n). 基础 ...

  3. JSOI2008 Blue Mary开公司 | 李超线段树学习笔记

    题目链接:戳我 这相当于是一个李超线段树的模板qwqwq,题解就不多说了. 代码如下: #include<iostream> #include<cstdio> #include ...

  4. hdu 1542 线段树+扫描线 学习

    学习扫描线ing... 玄学的东西... 扫描线其实就是用一条假想的线去扫描一堆矩形,借以求出他们的面积或周长(这一篇是面积,下一篇是周长) 扫描线求面积的主要思想就是对一个二维的矩形的某一维上建立一 ...

  5. 【学习笔记】线段树—扫描线补充 (IC_QQQ)

    [学习笔记]线段树-扫描线补充 (IC_QQQ) (感谢 \(IC\)_\(QQQ\) 大佬授以本内容的著作权.此人超然于世外,仅有 \(Luogu\) 账号 尚可膜拜) [学习笔记]线段树详解(全) ...

  6. 线段树合并学习笔记(P4556)

    直入主题: 学习线段树合并..... 从名字就能看出,这个东西要合并线段树..... 线段树怎么能合并呢...... 暴力合就行了啊...... 一次从上往下的遍历,把所有的节点信息暴力合并,然后就没 ...

  7. UOJ#470. 【ZJOI2019】语言 虚树,线段树合并

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ470.html 前言 做完情报中心来看这个题突然发现两题有相似之处然后就会做了. 题解 首先,我们考虑将所有答案点对分为两 ...

  8. Luogu5327【ZJOI2019】语言【树上差分,线段树合并】

    题目大意 给定一棵$n$个节点的树,维护$n$个集合,一开始第$i$个集合只有节点$i$.有$m$个操作,每次操作输入一个$(u,v)$,表示将$(u,v)$这条链上所有点所属的集合合并.求有多少个无 ...

  9. 可持久化线段树的学习(区间第k大和查询历史版本的数据)(杭电多校赛第二场1011)

    以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之 ...

随机推荐

  1. 《Java核心技术》 JVM指令集

    https://www.jianshu.com/p/bc91c6b46d7b

  2. Selenium的简单使用

    selenium的使用对于新手来说十分友好,因为他避开了如今网络中的异步加载抓取的困扰,使得我们大部分的时间可以用于提取信息和存储中,下面就简单的列一些使用的代码,希望给同样初学的你有一定的参考价值. ...

  3. Java入门 - 高级教程 - 08.Applet

    原文地址:http://www.work100.net/training/java-applet.html 更多教程:光束云 - 免费课程 Applet 序号 文内章节 视频 1 概述 2 Apple ...

  4. Linux上部署web服务器并发布web项目

    近在学习如何在linux上搭建web服务器来发布web项目,由于本人是linux新手,所以中间入了不少坑,搞了好久才搞出点成果.以下是具体的详细步骤以及我对此做的一些总结和个人的一些见解,希望对跟我一 ...

  5. Java容器解析系列(15) HashTable Dictionary & Properties

    HashTable的实现原理与HashMap没有什么区别; 其与HashMap的主要区别如下: 添加进入jdk时间:HashTable在jdk1.0时添加,HashMap在jdk1.2时添加; 类签名 ...

  6. tomcat梳理

    tomcat梳理 Tomcat的缺省端口是多少,怎么修改? 默认接口是8080 修改 1)找到Tomcat目录下的conf文件夹 2)进入conf文件夹里面找到server.xml文件 3)打开ser ...

  7. larabel Artisan Command 使用总结

    larabel Artisan Command 使用总结 定义命令 在routes/console.php下定义命令 Artisan::command('ltf', function () { (ne ...

  8. A novel multi-swarm particle swarm optimization with dynamic learning strategy(一种新颖的具有动态学习策略的多种群粒子群优化算法)

    1.核心 在每个子种群的粒子被划分为普通粒子(ordinary particles)和交流粒子(communication particles),在每次迭代过程中,不同的粒子执行不同的进化操作.普通粒 ...

  9. DjangoBBS项目功能拆分

    目录 1.随机验证码 2.注册功能 3.登录功能 4.登录认证装饰器配置 5.修改密码模态框方法 6.修改头像 7.修改签名模态框方法 8.注销功能模态框 9.用户上传静态文件配置 10.图片防盗链 ...

  10. centos7安装lnmp

    一.配置CentOS 第三方yum源(CentOS默认的标准源里没有nginx软件包) [root@localhost ~]# yum install wget #安装下载工具wget [root@l ...