随笔分类 - ACM / 数据结构
二进制枚举二叉树子集
摘要:#include <iostream> #include <cstring> #include <vector> using namespace std; const int MAX = 6; struct Tree{ double L, R; //树的左边和右边的长度 Tree():L(0), R
树状数组板子(维护前缀和)
摘要:#include<iostream> #include<cmath> #include<algorithm> #include<cstring> #include<queue> using namespace std; typedef long long ll; const int NS=5e5+5
RMQ 区间最大最小值
摘要:RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干次询问RMQ(i,j),返回数列A中下标在区间[i,j]中的最小/大值。 本文介绍一种比较高效的ST算法解决这个问题。ST(Sparse Table)算法可以在O(nlo
树状数组求逆序数对板子
摘要:#include<bits/stdc++.h>typedef long long ll;using namespace std;ll n;ll lowbit(ll a){ return a&-a;}int tree[50000];void update(ll a,ll b){ while(a<=n)
数据结构 单调栈 【计算所有区间最大值最小值】
摘要:题意:给出b[i]的计算公式,第i回合加上b[i]这个数,第i回合的结果为所有区间最小值的和。求所有回合结果的异或值。 思路:维护一个递增的单调栈,保证弹出的数都比b[i]大,那么这些数在包含b[i]的区间里面都不会被计算到。 单调栈里面维护这个数的值,以这个数为右端点的区间最小值和,下标。 ID
线段树与树状数组
摘要:线段树是什么??线段树怎么写?? 如果你在考提高组前一天还在问这个问题,那么你会与一等奖失之交臂;如果你还在冲击普及组一等奖,那么这篇博客会浪费你人生中宝贵的5~20分钟。 上面两句话显而易见,线段树这个数据结构是一个从萌新到正式OI选手的过渡,是一个非常重要的算法,也是一个对于萌新来说较难的算法。
并查集带向量
摘要:解题思路: 这道题是并查集题目中的经典。。。而且比普通并查集提高了一个档次,下面在基础并查集的前提上讲解并查集的真正用法。 基础回顾: find()函数找根结点的两种写法如下: 第一种递归: int find(int x){ return x == pre[x] ? x : find(pre[x])