数据结构
Zeolim
这个作者很懒,什么都没留下…
展开
-
[Comet OJ - #13] [DQ] [并查集] B C
C 给定1000*1000的矩阵,每次将一个子矩阵内全部值赋值为1,问四联通块数量 Q 3e4首先考虑复杂度,3e4次操作的合并暴力肯定不行,并且要考虑已经为1的块不应该再次考虑1.考虑合并操作,对于一个0点,当他变为1对答案的影响只有几种情况周边都是0,总联通联通块数量加1周边有(1 - 4)个不同联通块,ans -= 不同联通块个数+1对于相同的联通块通过当前0点合并没...原创 2019-10-28 10:06:02 · 2056 阅读 · 0 评论 -
[思维][RMQ] G Parenthesis
给一合法括号序列,交换xy位置的括号问交换后是否合法解题思路:左扩1右扩-1做前缀和数组当且仅到pre[i] >= 0 && pre[n] == 0时合法考虑交换, 若s[x] == s[y]交换无意义当前为'('后为')'则xy区间内差分值均要减二 所以区间极小值小于2则非法当前为')'后为'('交换后发现差分值只会变大,且原序列合法,则必然合法...原创 2019-10-07 22:27:06 · 105 阅读 · 0 评论 -
[可持久化权值线段树上二分] Just h-index
求区间x,y内的h-index(最大的h有h篇论文引用量不小于h)解题思路:在树上x,y区间内二分答案check#include <bits/stdc++.h>typedef long long ll;using namespace std; const int MAXN = 2e5 + 10; int fst, lst; int N; str...原创 2019-10-07 22:10:38 · 184 阅读 · 0 评论 -
[单调栈]1156E Special Segments of Permutation
题意:给一个1-n的排列, 你需要求出有多少个区间满足a[l] + a[r] = max(a[l] - a[r]);解题思路首先记录每个数字的下标然后用单调栈维护以 a[i] 为最高点的区间然后枚举 a[i] 区间内较短一侧的数因为1 - n 排列数值唯一且已经记录了位置, 所以可以 O(1) 的求出 (a[i] - 小区间内数 )是否在右侧区间中, 统计得解代码:...原创 2019-05-09 18:49:38 · 328 阅读 · 0 评论 -
[模板] [拓扑序列]
拓扑序列有很多用途, 比如判环, 将树上 / 图上的问题转化为序列上的问题再处理等等寻找过程就是不断找入度为0的点添加到Q尾部如果得到的拓扑序列长度不等于N 则说明有环void toposort(int n){ queue <int> Q; for(int i = 0; i < n; ++i) { if(deg[i] == 0) Q.push(i...原创 2019-04-25 19:24:12 · 313 阅读 · 0 评论 -
[权值BIT] 小朋友排队
解题思路每个小朋友需要交换的次数必然是左边比他大的 + 右边比他小的用 权值BIT 维护前缀后缀再单独计算等差即可主席树应该也是可以解决的/* Zeolim - An AC a day keeps the bug away*///#pragma GCC optimize(2)#include <cstdio>#include <iostream...原创 2019-05-05 10:49:54 · 192 阅读 · 0 评论 -
[LCA] 最近公共祖先
最近公共祖先求法很多, 各有优略LCA步骤及原理:例题:http://acm.hdu.edu.cn/showproblem.php?pid=2586代码:LCA倍增法DFS + 向前星版预处理DEG 为log2(n) + 1#include <bits/stdc++.h>typedef long long ll;typedef long doub...原创 2019-05-05 10:47:23 · 156 阅读 · 0 评论 -
[思维]奇数码问题
奇数码问题给定奇数版, 和两种状态A B问能否有解使板A 变为板 B例:1 2 30 4 67 5 81 2 34 5 67 8 0解: 将板A, B化为一维向量,转化为逆序对问题首先去掉位0有 1.空格的左右移动不影响整个串的顺序2.空格的上下移动必有等价与 swap(s[i], s[i - n - 1]) / swap(s[i], s[i...原创 2019-04-07 09:18:58 · 303 阅读 · 0 评论 -
[模板] 归并排序 逆序数 分治
归并排序图来自维基递归调用的过程需要在脑中模拟清楚然后是代码的细节问题多复习多理解刘汝佳版#include <bits/stdc++.h>using namespace std;const int MAXN = 1e5 + 10;int ans = 0;int arr[MAXN] = {0};int brr[MAXN] = {0};...原创 2018-04-24 20:31:47 · 158 阅读 · 0 评论 -
[数据结构] 对顶堆求中位数
中位数求法比较多 离线的我不会比较容易实现的就是 在线的对顶堆对顶堆的定义:小顶堆存 大于小顶堆堆顶 的 所有元素 大顶堆存 小于大顶堆堆顶 的 所有元素那么 小顶堆和大顶堆堆顶 就是整个 当前数据元素 的 分界线并且 堆顶对换/互相插入 不影响定义性质那么当求中位数时 只需调堆即可得益于堆的性质 每次调堆时间复杂度为log(n)1.当前总元素量为奇数时只...原创 2019-03-19 10:35:23 · 823 阅读 · 1 评论 -
[51NOD] 1065 最小正子段和
前缀和加SET维护 O(n + nlog(n))结果不能为零 白下了一组数据...set中的查找:set<#>iterator it = ST.lower_bound(x);#include <bits/stdc++.h>using namespace std;typedef long long ll;const int MAXN =...原创 2019-03-21 16:54:39 · 216 阅读 · 0 评论 -
[数据结构] 线性表的实现
1.顺序表//#pragma GCC optimize(2)#include <cstdio>#include <iostream>#include <cstdlib>#include <cmath>#include <cctype>#include <string>#include <cstring...原创 2018-09-23 17:13:27 · 285 阅读 · 0 评论