![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
线段树 树状数组 单调栈 单调队列
Xiao____Q
退役ACMer
展开
-
POJ - 2823 -- Sliding Window
题目来源:http://poj.org/problem?id=2823 滑动窗口问题,单调队列入门题。 代码: #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> #include <ios...原创 2018-09-01 10:27:21 · 100 阅读 · 0 评论 -
Gym - 101234J Zero Game
题目来源:http://codeforces.com/gym/101234/problem/J 单调队列在线做法,复杂度为O(q*n)。 思路来自:https://blog.csdn.net/acterminate/article/details/79416416 设sum[i]表示字符串的前缀和,则区间[l,r]内0的个数即为sum[r]-sum[l-1]。 因此所要求的即是r-(l-1...原创 2018-09-01 10:23:08 · 272 阅读 · 0 评论 -
ZOJ - 3195 -- Design the city
题目来源:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3195 给定一棵树,查询连通任意三点的路径的总长度。 设给定的三点为x,y,z。三点之间的路径总长度=(lca(x,y)+lca(y,z)+lca(x,z))/2。 代码: #include <cstdio> #include <cstr...原创 2018-08-09 21:08:51 · 145 阅读 · 0 评论 -
NOIP2014 联合权值
题目来源:https://www.luogu.org/problem/show?pid=1351#sub 邻接表存储树。 枚举每个节点,使之作为中点,先计算出与其相连的所有节点的权值总和l,与其相连的所有节点在该节点处形成的权值=(l-w)*w。 如果没有l,直接枚举以此节点为中点的节点对则只能过60%的数据。 代码: #include #inc原创 2016-10-20 19:40:04 · 297 阅读 · 0 评论 -
LuoguP1131
题意 给你一棵有根树,每条边都有一个全值。有一种操作,可以让某条边的权值+1。问最少操作多少次,可以让根到所有叶子节点的路径长度都相等。 思路 首先能够想到的是,最终所有路径都是初始时路径最长的长度。而且,对于每一棵子树,对其离根越近的边使用该操作一定会比对子树中的边使用更加合算。所以对于条边,可以加的权值的最大值为,子树的叶子中路径最大的值,离最终答案的差值。 可以用dfs+线段树维护子树中的最...原创 2019-10-07 20:09:19 · 103 阅读 · 0 评论 -
HDU - 6183 Color it
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=6183 思路来自:https://blog.csdn.net/jinglinxiao/article/details/77822234 对于每次查询,可以依次枚举所有颜色,查看该种颜色是否在所查询的矩形内,统计所有出现的颜色的个数。 考虑到每次查询的矩形都是贴着y轴的,这样只需要知道y轴该区间内是...原创 2019-02-27 15:25:14 · 202 阅读 · 0 评论 -
codeforces - 1114F Please, another Queries on Array?
题目来源:http://codeforces.com/contest/1114/problem/F 题意: 给定一个序列c,给定两种操作 (1)对区间[l,r]中所有元素*x。 (2)查询区间[l,r]中所有元素成积的欧拉函数值。 数组c的所有元素均<300,每次乘操作的x也均<300。 可以预先得知,300以内的素数共有62个,可以预先保存到数组中。 求取区间内所有数的...原创 2019-02-15 12:35:05 · 242 阅读 · 0 评论 -
HDU - 4027 -- Can you answer these queries?
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=4027 由于数据均在63位数的范围之内,因此每个数计算平方根的次数不会超过6次。更新时统计每个区段的更新次数,若>6则不再执行。维护区间和即可。 注意本题有坑,输入时每组数据的x和y可能会是x>y。 来自HDU-Disscuss的数据: 7 81 12 3 7 9 6 26 5 0...原创 2018-08-03 20:40:32 · 106 阅读 · 0 评论 -
POJ - 2991 - Crane
题目来源:http://poj.org/problem?id=2991 线段树经典题目。 线段树内保存五个量,区间左右端点left,right。该向量(区段起点终点首尾相连所得的向量)x,y的值。lazy标记(角度累加量)add。 线段树应支持:对区段内的所有向量的方向角全部+v的操作。 设原向量为(x,y),顺时针偏转角度为v,则偏转后的向量(x',y')=(x*cosv+y*sinv,...原创 2018-07-31 20:31:49 · 300 阅读 · 2 评论 -
POJ - 3367 -- Hotel
题目来源:http://poj.org/problem?id=3667 线段树中存放六个元素:左右端点left,right。左端点向右延伸后的最大长度cl,右端点向左延伸后的最大长度cr。区间内的最大连续长度maxl。lazy操作的标签add。 从上向下更新,如果覆盖段就打lazy标记,遍历到有lazy标记的线段就将lazy标记pushdown一层。 从下向上两两合并,最大连续长度可能来自左...原创 2018-07-30 21:39:19 · 274 阅读 · 0 评论 -
HDU - 2795 -- Billboard
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=2795 树状数组做法:https://blog.csdn.net/moon_sky1999/article/details/81274345 线段树做法,复杂度O ( n log n ): 维护区间最大值,对于每次查询,如果左半段区间的最大值满足题意,就向左查询,否则向右。 代码: #inc...原创 2018-07-29 19:13:12 · 167 阅读 · 0 评论 -
Gym - 100712L - Alternating Strings II
题目来源:http://codeforces.com/gym/100712/attachments dp+线段树维护。 f[i]表示[1,i]区间内最少要切多少次。f[i]=min(f[j])+1,(i-k=<j<=i-1,[j+1,i]满足条件)。 j若从i-1开始至i-k循环,若出现"00"或"11"的情况则开始更新。可以用前缀和sum[i]来维护[1,i]中出现"00"或"...原创 2018-07-23 09:02:05 · 151 阅读 · 0 评论 -
POJ 3468 -- A Simple Problem with Integers ( 线段树做法 )
题目来源:http://poj.org/problem?id=3468 树状数组做法:https://blog.csdn.net/moon_sky1999/article/details/81284933 线段树区间修改、区间查询模板题。 代码: #include <cstdio> #include <iostream> #include <cstdl...原创 2017-11-02 18:56:32 · 435 阅读 · 0 评论 -
HDU 1754
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1754 线段树点修改模板题。 代码: #include <bits/stdc++.h> using namespace std; const int maxn=2e5+10; int n,m,a[maxn]; struct tree { int left, right; ...原创 2017-11-02 18:49:04 · 177 阅读 · 0 评论 -
POJ 3468 -- A Simple Problem with Integers ( 树状数组做法 )
题目来源:http://poj.org/problem?id=3468 线段树做法:https://blog.csdn.net/moon_sky1999/article/details/78428165 详解树状数组区间修改、查询操作的博客: https://ahackh.ac.cn/2017/06/25/%E8%89%AF%E5%BF%83%E8%AF%A6%E8%A7%A3%E6%A0%...原创 2018-07-30 14:48:54 · 394 阅读 · 0 评论 -
HDU - 2795 -- Billboard (树状数组做法)
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=2795 线段树做法:https://blog.csdn.net/moon_sky1999/article/details/81274186 刚开始做这道题的时候,思路大概是二分+线段树维护区间最大值,二分区间[1,r]的右端点r,查询其最大值验证是否满足题意,直到得到最小的r,将a[r]取走。O( ...原创 2018-07-29 19:37:55 · 304 阅读 · 0 评论 -
HDU 4325 Flowers
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=4325 本题关键在于如何离散化。 先将所有时间节点排序,依次编号,再用map搞一下,这样就可得到每个数离散后的值。 之后的处理很简单了。 代码: #include #include #include #include #include #include using namespac原创 2017-08-26 21:30:40 · 210 阅读 · 0 评论 -
HDU3584 Cube
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=3584 三维树状数组。 由题意可知,进行偶数次操作后的结果是0,进行奇数次为1。 这样用树状数组记录操作次数,最后判断奇偶就行了。 在更新每一个立方体的时候,要注意处理那些立方体之外多加的那些。操作详见代码。 代码: #include #include #include #includ原创 2017-08-26 21:23:03 · 213 阅读 · 0 评论 -
HDU3874
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=3874 树状数组+离线。 离线是看别人的代码看懂的。 先将所有的区间按左端点排序,判断目前的颜色是否在[l,pos]内出现过,如果出现过,则进行一次更新。 在[l,r]区间内未出现的颜色会在求和是减掉,所以不会有未出现的且不会有重复的。 代码看不懂的时候,搞组数据模拟一下就能懂了,离线我就是这原创 2017-08-26 21:15:41 · 311 阅读 · 0 评论 -
HDU 2688
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=2688 与树状数组求逆序对的方法类似。 每次R操作在遍历整个区间时更新总对数的值。 特别注意:提交时要用C++。评测时不稳定,该代码有时过不了。 #include #include #include #include using namespace std; const int maxn原创 2017-08-26 20:12:32 · 223 阅读 · 0 评论 -
HDU2227
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=2227 O(n^2)的算法:f[i]表示a[1]~a[i]中包含a[i]的递增序列的个数。f[i]=∑f[j](ja[j])+1。所求结果即为∑f[i]。 这样处理会超时。需要用树状数组进行优化。 用类似树状数组求逆序对的个数的方法。 需要离散化。先将数组a进行排序,按数据a[i]的大小依次处理原创 2017-08-26 19:29:08 · 235 阅读 · 0 评论 -
HDU1892
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1892 二维树状数组模板题,要注意书的数量不够时该位置的书的数量变为0。 在查询区段值的时候的代码(最开始写的时候y直接用的,找了好久才找出错来): int sum(int x,int y) { int tot=0; for(;x;x-=lb(x)) { for(int j=y;j;j-原创 2017-08-26 19:11:03 · 238 阅读 · 0 评论 -
HDU1541 Stars
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1541 Astronomers often examine star maps where stars are represented by points on a plane and each star has Cartesian coordinates. Let the level原创 2017-06-13 22:31:59 · 239 阅读 · 0 评论