
数据结构————线段树
zfldongcidaci
这个作者很懒,什么都没留下…
展开
-
线段树模板(区间修改)——hdu1698
题目链接:https://vjudge.net/problem/HDU-1698 题目意思:有T组样例,每组样例给出n个棍子,开始棍子价值都是1,给出q个操作,可以把编号【x,y】之间的棍子的值改为z(z可以是1,2,3),求最终总价值。 分析:线段树区间修改,比较点修改,多了一个addv数组,该数组的意义在于可以记录修改的值。注意理解一个区间内其和为addv[rt]*(l-r+1),意义是改变原创 2017-10-09 19:31:46 · 1859 阅读 · 0 评论 -
线段树模板(点修改)
对应题目hdu–1166#include <iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<queue> #include<cmath> #include<map> #include<set> #include<cstring> #define INF 0x3f3f3f3f using namespa原创 2017-10-09 08:50:46 · 202 阅读 · 0 评论 -
线段树求逆序数(hdu1394)
题目链接: https://vjudge.net/problem/HDU-1394 分析: 逆序数定义:对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时,就说有1个逆序。一个排列中所有逆序总数叫做这个排列的逆序数。 思路:对于数组中的一个数x,统计它前面比x大的数的数目原创 2017-10-10 17:11:04 · 273 阅读 · 0 评论 -
线段树--点修改(uva12299)
题目链接:(https://vjudge.net/problem/UVA-12299) 分析: 两种操作,查询[x,y]之间的最小值,第二种是把给定位置的元素循环左移,若是最前面的,则移到最后面。将给定位置的节点值记录一下,再循环左移就行。注意建树的过程是n*logn的时间复杂度。另外注意输入的处理,%6s代表输入6个字符。 代码如下:#include <iostream> #include<原创 2017-10-10 22:05:30 · 242 阅读 · 0 评论