数据结构
TriAzure
靡不有初,鲜克有终。
展开
-
树状数组
不是2的幂次的情况一直理解的是错误的,今天跟着程序一点点debug想了好久终于想明白了。像第二张图,就是因为不是以2的幂次个叶子结点的满二叉树作为基准才会出错。因为树状数组是二进制操作的,所以只有上面两个条件同时满足那些操作才适配(满,并且叶子是2的幂次)。...原创 2019-10-28 20:40:26 · 82 阅读 · 0 评论 -
LuoguP1456 - Monkey King| 左倾堆 | 左偏树
洛谷P1456有n只猴子,每只猴子的战斗力为ai。m次操作,每次操作过后,猴子认识的猴子中(包括自己)战斗力最大的战斗力减半。操作后,两只猴子从不认识变为认识。输出打完架之后猴子认识的猴子中的最大战斗力。如果两只猴子已经认识,输出-1.不难想到要用堆。看起来要维护n个堆好像很恐怖。但我们并不需要保留每一只猴子的堆。打架过后,两只猴子就合在了一起。为什么可以把猴子合并进去?a和b打架,b和c...原创 2019-10-13 21:58:51 · 290 阅读 · 0 评论 -
BZOJ 2957 楼房重建 | 线段树(待补关于lazy)
题意:有n栋楼房,最初高度均为0,建筑队施工共M天。在第i天对第Xi位置的楼房进行操作,将其高度变为Yi。定义建筑物可视:只要存在一个点与(0,0)的连线与先前全部楼房不相交,即为可视。现在让你求每天过后可视的建筑物有多少。首先需要注意可视的定义,#include <bits/stdc++.h>using namespace std;typedef long long ll;...原创 2019-08-02 20:28:46 · 96 阅读 · 0 评论 -
Missing Gnomes | 队列 | 思维
题目传送门:点我题意:有1-n个数,现在剩下m个数字,请你往m个数字里把其他n-m个插进去,使得字典序最小,并输出这个插好的的序列。思路很明显,就是每次都在可以选的数字里选最小的插,如果比剩的m的大就插这m个里的,然后继续。但是我一直T……因为我想的是在这个过程中用一个数组c[]来存储放好的新数列,最后输出c[],不过其实只要一边排一边输出就好了,不需要额外的花销。后来看到题解,用队列会更简...原创 2019-09-11 17:13:42 · 112 阅读 · 0 评论 -
POJ 3468 - A Simple Problem with Integers | 线段树板子题
整理一下线段树的模板。#define _CRT_SECURE_NO_WARNINGS#include <cstdio>using namespace std;#define lson i << 1#define rson i << 1 | 1#define ll long long const int MAX_N = 100005;//题目描述n...原创 2019-09-20 19:37:57 · 83 阅读 · 0 评论 -
POJ 2528 - Mayor's Poster | 漂浮法 | 线段树
题目:传送门题意:有N张海报,每张海报会占据[l, r]的宽度,后来者贴在前者上面。问N张贴完后,共有多少张可见(没被覆盖)。T组输入。卡了三天终于想明白了ORZ线段树这是一个很经典的区间覆盖问题。想到用线段树并不困难,但是这里会出现两个问题。第一是节点参数的设置。最开始我的想法是,设置代表先后顺序的“时间高度”maxheight, rightheight, leftheight。其实只...原创 2019-09-23 19:56:01 · 102 阅读 · 0 评论 -
POJ 2559 - Largest Rectangle in a Histogram | 单调栈
传送门题意:求直方图中隐藏的最大矩形的面积(默认宽度为1)首先,只要读懂题意,就不难想到下面这种最简单的解法。这种解法很直观地说明了这道题的核心:左右两边找比自己高的柱子。但是O(n3)的复杂度,一定会T。这里就需要一种快速的查找方法。#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <cmath&g...原创 2019-10-08 15:24:31 · 96 阅读 · 0 评论