随笔分类 -  数据结构们

摘要:Aimee 这是一道分块好题 显然我们要分块,一开始我们要建立分块,在这里我们要统计的数据有:原序列,每个元素属于哪一个块,每一个块的左右边界,每一个块的lazy,块的总数。 由于这个题目的要求,我们还需要建立一个复制的块来排序,进行查询。 最后不成块元素单独成块。 void build() { b 阅读全文
posted @ 2021-03-28 17:33 Simex 阅读(68) 评论(0) 推荐(0)
摘要:Aimee 转移方程很好想$dp_{i,0/1}$表示第i个选(1)或不选(0) 其中$dp_{i,0}=max(dp_{i-1,0},dp_{i-1,1})$ 而$dp_{i,1}=max(dp[j]+sum_i-sum_j),i-j<=k$ 都有$sum_i$,那就成了$dp_{i,1}=max 阅读全文
posted @ 2021-02-01 12:58 Simex 阅读(67) 评论(0) 推荐(0)
摘要:Aimee map出奇迹 #include<iostream> #include<cstdio> #include<map> using namespace std; map <char,int> m; map <int,char> mm; string s,ans; int main(){ m[' 阅读全文
posted @ 2020-11-28 18:39 Simex 阅读(109) 评论(0) 推荐(0)
摘要:Miku 你只需要一个小小的对顶堆 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<queue> using namespace std; priority_queue <int> 阅读全文
posted @ 2020-11-20 19:45 Simex 阅读(122) 评论(0) 推荐(0)
摘要:这个合并果子版的题和哈夫曼树极为相似 Miku #include<iostream> #include<cstdio> #include<algorithm> #include<queue> using namespace std; priority_queue <long long> q; lon 阅读全文
posted @ 2020-10-02 23:16 Simex 阅读(111) 评论(0) 推荐(0)
摘要:链接:Miku 这里是O(\(n^2\))的做法 首先可以证明,对于每一条直径,求出的偏心距是一样的 怎么证明?显然(我不会) 怎样求树的直径?简单。 贪心:在一条直径上,显然选择的路径越长越好 实现:首先求出树上所有点之间的距离(\(n^2\))一直dfs就行 然后找出直径及直径经过的点 最后在直 阅读全文
posted @ 2020-09-19 20:30 Simex 阅读(116) 评论(0) 推荐(0)
摘要:链接:Miku 和[线段树2](https://www.luogu.com.cn/problem/P3373) 一样的题 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define int lon 阅读全文
posted @ 2020-09-12 20:06 Simex 阅读(123) 评论(0) 推荐(0)
摘要:Miku 仍然还是线段树的水题 惨痛教训:不要无脑复制板子 #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #define int long long using namespace std; lon 阅读全文
posted @ 2020-09-06 21:34 Simex 阅读(126) 评论(0) 推荐(0)
摘要:Miku 对于线段树来讲,lazy的更新是一个要仔细考虑的问题 #include<iostream> #include<cstdio> #include<cstring> #include<cstring> using namespace std; int n,m; int sum[1200005] 阅读全文
posted @ 2020-09-06 20:52 Simex 阅读(89) 评论(0) 推荐(0)
摘要:Miku 思路:参照这位神仙 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<vector> using namespace std; const int maxn = 1e5+50 阅读全文
posted @ 2020-08-27 17:14 Simex 阅读(73) 评论(0) 推荐(0)
摘要:让A,b序列中大小排名相对应即可 若A中第j大的位于i,则应该b中第j大位于i 证明:假如a1<a2,b1<b2 则排列方式有 a1,a2,b1,b2或 a1,a2,b2,b1那么 对于这两种情况上,平方并做差,即可得以上结论 然而大问题是这样离散化后怎么搞出交换几次呢 离散化后 \(c_{a_i} 阅读全文
posted @ 2020-08-26 20:16 Simex 阅读(85) 评论(0) 推荐(0)
摘要:Miku 画一画图就能知道规律 倘若询问区间是偶数 画图可知,答案为零 为奇数,则为 \(A_L\)^$A_{L+2}$·······$A_R$ 然后奇数偶数分别开一个 树状数组 就行了 #include<iostream> #include<cstdio> #include<algorithm> 阅读全文
posted @ 2020-08-26 17:03 Simex 阅读(142) 评论(0) 推荐(0)
摘要:Miku 第一关键字是温度,那完全可以在保证图联通的前提下找到最大的最小温度 最小生成树 然后把所有比最小温度还小的边建成一个新图,跑最短路就行了 #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #inc 阅读全文
posted @ 2020-08-06 13:31 Simex 阅读(68) 评论(0) 推荐(0)
摘要:Miku 规律:假如只有一个栈,那么如果原序列存在三个数x<y<Z&&$V_y>V_x>V_z$ 那么就不可能排序成功,但是这里有两个栈,那么就应该把原序列分成两部分 两部分?二分图。 把不能在一起的点连边,进行二分图染色。 如果成功,就意味着存在&&两个栈的成员搞定了 反之不存在 #include 阅读全文
posted @ 2020-08-03 14:16 Simex 阅读(100) 评论(0) 推荐(0)
摘要:Miku 显然思路是倒着扫,倒着染。 然而这样有一个问题,这样做,那么对于已经染色的区间是不需要重新染色的, 但是遍历的时候可以找到已染色区间的一个端点,另一个在哪? 用并查集解决 fa[x]为x右边第一个没染色的端点 然后就O(N)解决了 提示:n+1个点也要初始化,因为只要n点被染色,那么一定指 阅读全文
posted @ 2020-08-02 22:25 Simex 阅读(97) 评论(0) 推荐(0)
摘要:Miku 莫名其妙每一天 如果一天满足和前面的连续一些天可能不下降,那么它的最大气温一定不小于之前序列的每一天的最小气温 然后这东西用单调队列维护 再开一个队列维护这一段序列的堆头 就Ac了 #include<iostream> #include<cstdio> #include<algorithm 阅读全文
posted @ 2020-08-02 21:06 Simex 阅读(145) 评论(0) 推荐(0)
摘要:Miku 贪心 按照时间从前往后尽可能的修 如果能修就修,修不了的话 我们可以选择撤掉一个以前修的腾出时间来,但是,腾出两个显然更蠢 那么,显然无论腾不腾,截止到此建筑,能修的数量最多一定() 由此观之,应该把已修的最大的取出来,然后进行比较,放进小的,扔掉大的,来为后面腾时间 #include<i 阅读全文
posted @ 2020-08-02 19:33 Simex 阅读(81) 评论(0) 推荐(0)
摘要:Miku 线性dp+单调队列优化 单独的线性dp很好想,也很好卡。需要用单调队列优化。 对于1~l-1的点,他们是不可能到达的,(当然还有,不过因此for从l开始)。初始化dp为一个大负数,因为有negative答案 然后从l~n枚举(这里是要算dp的点),画个图就很好理解,单调队列扫到的点和枚举的 阅读全文
posted @ 2020-08-02 17:53 Simex 阅读(127) 评论(0) 推荐(0)
摘要:树上差分板子的板子 Miku #include<iostream> #include<cstdio> using namespace std; int head[2*500001]; int p; struct b{ int to; int ne; } e[2*500001]; int fa[2*5 阅读全文
posted @ 2020-08-02 11:54 Simex 阅读(101) 评论(0) 推荐(0)
摘要:链接:Miku 一个map干过去 #include <map> #include <cstring> #include <cstdio> #include <cstdio> #include <algorithm> #include <iostream> using namespace std; s 阅读全文
posted @ 2020-07-30 16:05 Simex 阅读(144) 评论(0) 推荐(0)