
数据结构
线段树 树状数组 单调栈 单调队列
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 · 149 阅读 · 0 评论 -
Gym - 101234J Zero Game
题目来源:http://codeforces.com/gym/101234/problem/J单调队列在线做法,复杂度为O(q*n)。思路来自:https://blog.youkuaiyun.com/acterminate/article/details/79416416设sum[i]表示字符串的前缀和,则区间[l,r]内0的个数即为sum[r]-sum[l-1]。因此所要求的即是r-(l-1...原创 2018-09-01 10:23:08 · 327 阅读 · 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 · 167 阅读 · 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 · 331 阅读 · 0 评论 -
LuoguP1131
题意给你一棵有根树,每条边都有一个全值。有一种操作,可以让某条边的权值+1。问最少操作多少次,可以让根到所有叶子节点的路径长度都相等。思路首先能够想到的是,最终所有路径都是初始时路径最长的长度。而且,对于每一棵子树,对其离根越近的边使用该操作一定会比对子树中的边使用更加合算。所以对于条边,可以加的权值的最大值为,子树的叶子中路径最大的值,离最终答案的差值。可以用dfs+线段树维护子树中的最...原创 2019-10-07 20:09:19 · 147 阅读 · 0 评论 -
HDU - 6183 Color it
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=6183思路来自:https://blog.youkuaiyun.com/jinglinxiao/article/details/77822234对于每次查询,可以依次枚举所有颜色,查看该种颜色是否在所查询的矩形内,统计所有出现的颜色的个数。考虑到每次查询的矩形都是贴着y轴的,这样只需要知道y轴该区间内是...原创 2019-02-27 15:25:14 · 249 阅读 · 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 · 278 阅读 · 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的数据:781 12 3 7 9 6 2650...原创 2018-08-03 20:40:32 · 137 阅读 · 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 · 323 阅读 · 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 · 319 阅读 · 0 评论 -
HDU - 2795 -- Billboard
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=2795树状数组做法:https://blog.youkuaiyun.com/moon_sky1999/article/details/81274345线段树做法,复杂度O ( n log n ):维护区间最大值,对于每次查询,如果左半段区间的最大值满足题意,就向左查询,否则向右。代码:#inc...原创 2018-07-29 19:13:12 · 205 阅读 · 0 评论 -
Gym - 100712L - Alternating Strings II
题目来源:http://codeforces.com/gym/100712/attachmentsdp+线段树维护。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 · 187 阅读 · 0 评论 -
POJ 3468 -- A Simple Problem with Integers ( 线段树做法 )
题目来源:http://poj.org/problem?id=3468树状数组做法:https://blog.youkuaiyun.com/moon_sky1999/article/details/81284933线段树区间修改、区间查询模板题。代码: #include <cstdio>#include <iostream>#include <cstdl...原创 2017-11-02 18:56:32 · 478 阅读 · 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 · 206 阅读 · 0 评论 -
POJ 3468 -- A Simple Problem with Integers ( 树状数组做法 )
题目来源:http://poj.org/problem?id=3468线段树做法:https://blog.youkuaiyun.com/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 · 425 阅读 · 0 评论 -
HDU - 2795 -- Billboard (树状数组做法)
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=2795线段树做法:https://blog.youkuaiyun.com/moon_sky1999/article/details/81274186刚开始做这道题的时候,思路大概是二分+线段树维护区间最大值,二分区间[1,r]的右端点r,查询其最大值验证是否满足题意,直到得到最小的r,将a[r]取走。O( ...原创 2018-07-29 19:37:55 · 337 阅读 · 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 · 247 阅读 · 0 评论 -
HDU3584 Cube
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=3584三维树状数组。由题意可知,进行偶数次操作后的结果是0,进行奇数次为1。这样用树状数组记录操作次数,最后判断奇偶就行了。在更新每一个立方体的时候,要注意处理那些立方体之外多加的那些。操作详见代码。代码:#include #include #include #includ原创 2017-08-26 21:23:03 · 267 阅读 · 0 评论 -
HDU3874
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=3874树状数组+离线。离线是看别人的代码看懂的。先将所有的区间按左端点排序,判断目前的颜色是否在[l,pos]内出现过,如果出现过,则进行一次更新。在[l,r]区间内未出现的颜色会在求和是减掉,所以不会有未出现的且不会有重复的。代码看不懂的时候,搞组数据模拟一下就能懂了,离线我就是这原创 2017-08-26 21:15:41 · 343 阅读 · 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 · 261 阅读 · 0 评论 -
HDU2227
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=2227O(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 · 294 阅读 · 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 · 275 阅读 · 0 评论 -
HDU1541 Stars
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1541Astronomers 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 · 284 阅读 · 0 评论