数据结构
文章平均质量分 85
EndlessLethe
这个作者很懒,什么都没留下…
展开
-
树状数组详解
为什么要使用树状数组 比如说,我这里有一组数1, 2, 3, 2, …, k。我想知道第i到第j的和\(\mathop \sum \limits_{n = i}^j v[i]\)是多少? 朴素算法:for (int k = 0; k < n; k++) if (k >= i && k <= j) ans += v[k];类似这种的写法,虽然在某些点值改变时也依然可以计算(我们称这种问题为原创 2017-12-19 01:12:02 · 271 阅读 · 0 评论 -
poj 2796 Feel Good 单调栈题解
单调栈模板题#include <bits/stdc++.h>using namespace::std;typedef long long ll;const ll MAXN = 100000+50;ll ms[MAXN], r;ll L[MAXN], R[MAXN];ll n, pos, maxNum, x[MAXN];ll sum[MAXN];int main() { ios_b原创 2017-12-13 19:28:35 · 694 阅读 · 0 评论 -
FZU 1894 志愿者选拔 单调队列 题解
单调栈模板题#include <bits/stdc++.h>using namespace::std;const int MAXN = 1000000 + 50;int mq[MAXN], q[MAXN];int T, x, index, front, r, l;char input[10];int main() { ios_base::sync_with_stdio(0);cin.t原创 2017-12-13 19:34:36 · 607 阅读 · 0 评论 -
1308 音乐会的等待/诺诺的队列 单调栈 题解
题目地址:FJSDFZOJ 1308 音乐会的等待 题解: [SMOJ2116]诺诺的队列 音乐会的等待(诺诺的队列)AC代码:#include <bits/stdc++.h>using namespace::std;typedef long long ll;const int MAXN = 500000+50;struct M { ll x; ll len;} x[MAX原创 2017-12-13 22:11:58 · 540 阅读 · 0 评论 -
单调队列和单调栈详解
这里是我的blog:有更多算法分享=v= https://endlesslethe.com/monotone-queue-and-stack-tutorial.html 前言 单调栈和单调队列算是栈和队列的高级应用吧,在公司面试中应该是不怎么会出现的(除非算法岗?)。因为原理比较简单,网络上的相关资料反而对于这两个东西说得都不甚清楚,尤其是它们的应用方法。最基本的两本中文算法书“紫书”和“白皮”都原创 2017-12-14 19:11:43 · 6245 阅读 · 3 评论 -
浅谈【剑指offer】滑动窗口的最大值
题目给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1...原创 2019-09-04 23:13:41 · 185 阅读 · 0 评论 -
深入理解归并排序——从归并排序到CDQ分治、归并树
归并排序首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。//将有序数组a[]和b[]合并到c[]中 void merge(int a[], int n, int b[], int m, int c[]) { int i, j, k; i = j = k ...原创 2019-09-21 00:14:31 · 728 阅读 · 0 评论