![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
whoammiiiiii
这个作者很懒,什么都没留下…
展开
-
hdu 3743 && hdu 4911(树状数组求逆序对的应用)
经典问题:两两交换得到递增,问最少交换次数3743题意:现在有n个数,每个数distinct,现在只能交换两两相邻的数,现在问你至少要交换多少次才能让这n个数是单调递增的。思路:可以想到这个交换的过程类似于冒泡排序,可以证明冒泡这样拍所需的交换次数是最少的(虽然我不会证)所以每个数要交换多少次,就看前面有多少比他大的数,最后也就是求总的逆序对个数。4911题意:意思基本跟3743一样,多了几个条件,现在只可以做k步两两交换操作,现在问你能获得最少逆序对的个数。思路:max(0原创 2020-08-19 23:05:34 · 113 阅读 · 0 评论 -
POJ 3667 (线段树区间合并)
去年做过的题,感觉好久没写线段树了,复习一波XD。区间合并入门题。用三个数组维护一个区间内最大连续长度,从左一开始的最大连续长度,从右一的最大连续长度,和整个区间的最大连续长度。细节见代码。#include <stdio.h>#include <vector>#include <algorithm>#include <string.h>#include <limits.h>#include <string>#incl原创 2020-08-03 23:44:34 · 218 阅读 · 0 评论 -
cf 1354D multiset(数值范围1e6之间用线段树实现multiset的插入,查找,单个删除功能)
题目链接线段树最常见的每个节点是存未知的信息,但这题不一样,建立线段树的节点是保存数值的信息,这题每个节点记录的是出现的次数。先通过原来"multiset"里有的元素更新一下线段树。插入:插入num,把区间[num,num]的节点+1,然后pushUp。查找: 查找第num大的数,看左子树节点存的值是不是大于num,大于num的话就往左子树找,否则num = num - 左子树的值,然后往右子树找,l == r时return l。单个删除:先查找到第k大的数num,然后对区间[num, nu原创 2020-05-18 03:37:08 · 185 阅读 · 0 评论 -
hdu 3333 (主席树在线求区间不同数的个数 or 线段树或者树状数组离线询问处理 )
题目链接时限 :3000ms题意:给你n个数,下面有m个询问,每次询问区间【l,r】之间不同数的和是多少。思路:1.主席树 500ms。和spoj DQUERY那道题求区间不同数的个数差不多,区别就是spoj那道题1到n每个点都要更新主席树那条链是+1-1的操作,这个是对那条链+num-num的操作。/*** Author : zzy* Date : 2020-04-06-15....原创 2020-04-07 03:34:52 · 207 阅读 · 0 评论 -
hdu 4614线段树区间求和区间更新
题目链接题意:给你n个花瓶,一开始都没放花,现在有两个操作。1.要求在从位置p开始往后放val个花,如果该花瓶有花,就不管这个花瓶往下看,若放完n个花瓶还有剩余,就丢掉,然后输出第一个放花的位置和最后一个放花的位置。2.把a~b区间的花全都丢掉,然后输出丢掉花的数量。思路:先看操作1,就是通过前缀和思想找到第一个放花的位置和最后一个放花的位置, 这样好操作,不然找从p开始有第一个花的位...原创 2020-03-21 21:52:44 · 99 阅读 · 0 评论 -
hdu 4578 (巨烦线段树)
题目链接题意:有三个区间操作1.+c2.*c3.=c有一个询问区间p次幂的和(1<=p<=3)思路:真的吐了,各个laz之间还有关系,要先搞=c的laz,把他的左右孩子的+cc的laz都赋为初值,然后搞c的laz,把那个值再给+c的laz去乘,+c的laz就常规更新一下并赋给他的孩子就行。ac代码:1800ms 时限:5000ms/*** Think twice...原创 2020-03-21 02:25:47 · 158 阅读 · 0 评论 -
div2 #602 (线段树维护区间第i个数)
题目链接题目大意:给你一串n个数的序列,然后m个询问a b问你在1~n区间内选取a个和最大的那个区间,并选取下标字典序最小的那个区间,输出这个区间内第b个数。总结:1e6,2e5的操作次数的数据,可以考虑线段树。multiset选取某个位置的数,可以用这题线段树的用法替代。线段树做法:#include <bits/stdc++.h>#define mp make_p...原创 2019-12-03 22:13:15 · 136 阅读 · 0 评论 -
div2 #603 括号专题+线段树维护区间(1~n)和的最大值和最小值和本身
题目链接题目大意:我们定义合法的字符串为 T, (T), ((T)(T))… 他给出n个操作,RL代表左移,剩下的字符就表示把当前位置上的字符替换为现在的字符。现在有个染色规则,如何两个括号是内嵌(nested)的关系,那他们的颜色就一定要不一样,然后输出每步操作后染色的最少颜色,如果不是合法字符串, 那就输出-1.仔细一想,最少颜色其实就是字符串的最大深度。我们可以用线段树维护1~1e6...原创 2019-12-03 16:44:21 · 149 阅读 · 0 评论