阅读本文前,请确保已经阅读并理解了如下两篇文章: 『线段树 Segment Tree』 『线段树简单运用』 引入 这是一种由\(THU-zkw\)大佬发明的数据结构,本质上是经典的线段树区间划分思想,采用了自底向上的方式传递区间信息,避免的递归结构,其代码相对经典线段树更简单,常数更小,易于实现. 统计的力量-源自这里. 基础非递归 接下来,我们将讲解\(zkw\)线段树的第一种实现形式,用于单点修改 区间查询,我们以查询区间最大值为例来讲解. 建树 普通线段树需要建树,\(zkw\)线段树当然…
基本思路就是,从后往前读取数字small[i].在剩余编号集合里(一开始剩余编号集合为全集)查找第small[i]+1个编号,该编号就是对应位置牛的编号. 若直接用数组来做,则每次查找都需要遍历前n个数.而用线段树来做则可以降低为nlogn的复杂度. 事实上感觉可以直接用stl的set来做,直接模拟应该也能不超时得解. 本题主要用来熟悉线段树这个结构. ac代码如下: #include<iostream> #include<cstdio> #include<cstdio>…
个人心得:线段树就是将一段序列拆分为一个个单独的节点,不过每俩个节点又可以联系在一起,所以就能很好的结合,比如这一题, 每次插入的时候都将这一段区间的最大最小值更新,就能大大减少时间. 这个线段树建立是以数组的,根节点为0,后面每次都是父节点*2+1/2. 这题简单的教会了我如何创建线段树,以及一些简单的线段树操作,还要继续加深. For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the…
线段树 Description N (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacular display of poor judgment, they visited the neighborhood 'watering hole' and drank a few too many beers before dinner. When it was time to line up for the…
Cows 题目:http://poj.org/problem?id=2481 题意:有N头牛,每仅仅牛有一个值[S,E],假设对于牛i和牛j来说,它们的值满足以下的条件则证明牛i比牛j强壮:Si <=Sjand Ej <= Ei and Ei - Si > Ej - Sj. 如今已知每一头牛的測验值,要求输出每头牛有几头牛比其强壮. 思路:将牛依照S从小到大排序.S同样依照E从大到小排序,这就保证了排在后面的牛一定不比前面的牛强壮. 再依照E值(离散化后)建立一颗线段树(这里最值仅仅有1…
Let the light guide us Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 62768/32768 K (Java/Others) Total Submission(s): 677    Accepted Submission(s): 226 Problem Description Plain of despair was once an ancient battlefield where those brave…
题目大意: 有 n 头牛,编号为 1 - n 乱序排成一列,现已知每头牛前面有多少头牛比它的编号小,从前往后输出每头牛的编号. 思路: 从后往前推,假如排在最后的一头牛比他编号小的数量为a,那么它的编号必然为a+1.我们把编号为a+1的这头牛删掉,假如排在倒数第二的一头牛比他编号小的数量为b,那么该牛就为删掉最后一头牛后剩余牛中的第b+1头牛,我们可以照此思路下去... 问题就可以转化为搜索排在第k位的数为多少,我们可以用线段树来实现. 代码: #include<iostream> #incl…
题目链接:传送门 参考文章:https://blog.csdn.net/qiqi_skystar/article/details/50299743 题意:给出一个高h,宽w的方形画板,有高位1宽为wi的单元,用这些单元去覆盖这个画板,每次求出单元在第几行, 从画板的最顶部边开始,顶部不行就最左边,如果都不行,就输出-1. 思路: 总共n次,所以高度大于n也就没有意义了(题中的h范围很大,一开始我还想用离散化,后来发现是吓唬人的) 每一行都要可以视为一个单元,所以就是求出这些行中的最大值,比较最大…
Description 有一个n个元素的数组,每个元素初始均为0.有m条指令,要么让其中一段连续序列数字反转--0变1,1变0(操作1),要么询问某个元素的值(操作2).例如当n=20时,10条指令如下: Input 第一行包含两个整数n,m,表示数组的长度和指令的条数,以下m行,每行的第一个数t表示操作的种类.若t=1, 则接下来有两个数L, R (L<=R),表示区间[L, R]的每个数均反转:若t=2,则接下来只有一个数I,表示询问的下 标.1<=n<=100,000,1<=…
Lost Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10354 Accepted: 6631 Description N (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacular display of poor judgment, they visited the neighborhood 'watering h…