【RMQ/线段树/树状数组】
文章平均质量分 83
herongweiV
喜爱编程,热爱算法。
展开
-
RMQ && 树状数组 (初学)
先复习一下今天刚学的RMQ算法知识;RMQ算法(Range Minimum Query):1.算法思想 求静态范围最值问题,适合于静态连续区间查询。 A[ i ] [ j ] 的值代表的是原数组中以 i 开始的连续 (12.代码 //2.1 预处理代码for(int j = 1 ; j != 20 ; ++j ) //原创 2015-01-29 21:45:18 · 1324 阅读 · 0 评论 -
Notonlysuccess 线段树
很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章了,觉得当时的代码风格实在是太丑了,很多线段树的初学者可能就是看着这篇文章来练习的,如果不小心被我培养出了这么糟糕的风格,实在是过意不去,正好过几天又要给集训队讲解线段树,所以决定把这些题目重新写一遍,顺便把近年我接触到的一些新题更新上去~;并且学习了spla转载 2015-10-08 16:28:21 · 891 阅读 · 0 评论 -
NYIST 116 士兵杀敌(二)
链接:click here题意:南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。思路:RMQ 入门代码:#include //RMQ #incl原创 2015-01-29 22:17:42 · 1056 阅读 · 0 评论 -
HDU 5372 Segment Game (MUT#7 树状数组+离散化)
【题目链接】:click here~~【题目大意】:题意:两种操作,添加线段和删除线段,第i次添加时告诉线段起点并且要添加长度为i的线段,删除第i次添加的线段,问每次添加后有多少线段是落在当前要画的线段内部的。【思路】:比赛的时候居然直接无视了这道题,赛后看了一下,感觉要用到树状数组,有一种前后互相影响的样子,昨天想了一下午,加上昨天晚上,总算是搞明白了,因为每次画的线段的原创 2015-08-13 10:11:54 · 910 阅读 · 0 评论 -
HDU 1556 Color the ball (树状数组简单应用)
【题目链接】:click here~~【题目大意】:DescriptionN个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a Input每个测试实例第一行为一个整数N,(N 当N = 0,输入结束。 Output每个测试实例输出一行,包括N个整数,第I个数代表第I个气原创 2015-08-12 14:05:56 · 865 阅读 · 0 评论 -
poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
树状数组,具体的说是 离散化+树状数组。这也是学习树状数组的第一题.算法的大体流程就是:1.先对输入的数组离散化,使得各个元素比较接近,而不是离散的,2.接着,运用树状数组的标准操作来累计数组的逆序数。算法详细解释:1.解释为什么要有离散的这么一个过程? 刚开始以为999.999.999这么一个数字,对于int存储类型来说是足够了。翻译 2015-08-12 17:46:32 · 900 阅读 · 0 评论 -
HDU 5289 Assignment (二分+区间最值)
【题目链接】click here~~【题目大意】:给出一个数列,问其中存在多少连续子序列,子序列的最大值-最小值【思路】:枚举数列左端点,然后二分枚举右端点,用ST算法求区间最值。(或用单调队列的思路)代码:#include using namespace std;const int N=1e5+10;typedef long long LL;#define Max原创 2015-08-24 21:03:52 · 976 阅读 · 0 评论 -
最大最小值(ST基础版)
最大最小值时间限制:1000 ms | 内存限制:65535 KB描述给出N个整数,执行M次询问。对于每次询问,首先输入三个整数C、L、R: 如果C等于1,输出第L个数到第R个数之间的最小值; 如果C等于2,输出第L个数到第R个数之间的最大值; 如果C等于3,输出第L个数到第R个数之间的最小值与最大值的和。(包括翻译 2015-05-25 21:21:27 · 1292 阅读 · 0 评论 -
RMQ 问题之Sparse_Table算法
RMQ问题,全名(Range Minimum/Maximum Query),是求给定区间中的最值问题。主要方法及复杂度如下:1、朴素(即搜索),O(n)-O(qn) online。2、线段树,O(n)-O(qlogn) online。3、Sparse_Table(实质是动态规划),O(nlogn)-O(1) online。4、RMQ标准算法:先规约成LCA(Lowest C翻译 2015-04-01 16:32:05 · 952 阅读 · 0 评论 -
一步一步理解线段树
一步一步理解线段树目录一、概述二、从一个例子理解线段树 创建线段树 线段树区间查询 单节点更新 区间更新三、线段树实战--------------------------发现很好的一篇解释线段树的博文,转载学习了一 概述线段树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区转载 2015-03-25 17:11:21 · 774 阅读 · 0 评论 -
HDU 1754 I hate it 【线段树--单点更新,区间最值】
链接:click here~~ 题意:很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。Input本题目包含多组测试,请处理到文件结束。在每个测试的第一行,有两个正整数 N 和 M ( 0学生I原创 2015-03-25 17:15:42 · 903 阅读 · 0 评论 -
【完全版】线段树初学--HDU 1166 敌兵布阵
【完全版】线段树初学--HDU 1166 敌兵布阵 链接:click here~~题意:第一行一个整数T,表示有T组数据。每组数据第一行一个正整数N(N接下来每行有一条命令,命令有4种形式:(1) Add i j,i和j为正整数,表示第i个营地增加j个人(j不超过30)(2)Sub i j ,i和j为正整数,表示第i个营地减少j个人(j不超过30);(3)Query原创 2015-03-25 17:03:56 · 955 阅读 · 0 评论 -
【线段树】线段树入门
线段树的入门级 总结 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。 使用线段树可以转载 2014-09-21 11:20:53 · 868 阅读 · 0 评论 -
HDOJ 1166 ---敌兵布阵
在代码前先介绍一些大神线段树风格:maxn是题目给的最大区间,而节点数要开4倍,确切的来说节点数要开大于maxn的最小2x的两倍lson和rson分辨表示结点的左儿子和右儿子,由于每次传参数的时候都固定是这几个变量,所以可以用预定于比较方便的表示以前的写法是另外开两个个数组记录每个结点所表示的区间,其实这个区间不必保存,一边算一边传下去就行,只需要写函数的时候多两个参数,结合lson和rs原创 2014-09-21 08:57:45 · 980 阅读 · 0 评论 -
NYOJ 233 &&NYOJ 322 Sort(树状数组)
链接:click here题意:描述 You want to processe a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. Then how many times it nee原创 2015-02-25 20:20:24 · 940 阅读 · 0 评论 -
NYOJ117&& 树状数组求逆序数
(转)树状数组可以用来求逆序数, 当然一般用归并求。如果数据不是很大, 可以一个个插入到树状数组中, 每插入一个数, 统计比他小的数的个数,对应的逆序为 i- getsum( data[i] ),其中 i 为当前已经插入的数的个数, getsum( data[i] )为比 data[i] 小的数的个数i- sum( data[i] ) 即比 data[i] 大的个数, 即逆序的个数但如果数据比较大原创 2015-01-29 21:57:02 · 1096 阅读 · 0 评论 -
【BJTU+求和+线段树】
【题目描述】:题面描述某一天, calfcamel 问二哥,有道数学题怎么做呀?二哥看了一下说我不会呀,于是二哥找到了你,请你帮他解决这个问题,这样二哥就可以鄙视 calfcamel 数学菜了。给你一个长度为 n 的整数序列 a ,对该序列有 q 个查询,每次询问涉及序列中从 left 到 right 之间的数,包括 left 和 right ,请给出公式的结果。即输出原创 2017-05-10 21:34:32 · 987 阅读 · 2 评论