摘要: 题目 题意 给你一个数组然后问你有几种k操作在m此交换下,变成给出的数组 k操作为让后k个数到前面去 做题方法 $m<=\frac{n}{3}$所以$m$最多影响$\frac{2n}{3}\(个数字,所以还有\)\frac{n}{3}$个数字需要$k$操作影响 $cnt[k]+2m>=n$而$\su 阅读全文
posted @ 2021-11-02 12:53 m_rd 阅读(65) 评论(0) 推荐(0)
摘要: 树上启发式合并 作用 主要解决树上对每个根节点的影响,复杂度最好O(nlog n),最差O(N*N) #include <bits/stdc++.h> using namespace std; #define ll long long const ll N = 1e5 + 10; ll dep[N] 阅读全文
posted @ 2021-11-02 12:49 m_rd 阅读(38) 评论(0) 推荐(0)
摘要: 分析 LCA 就是求两个点的最近公共祖先,用倍增的思想,现预处理一下节点走到的地方,然后再求lca #include<bits/stdc++.h> using namespace std; #define int long long const int N=5e5+10; int fa[N][21] 阅读全文
posted @ 2021-11-02 12:46 m_rd 阅读(49) 评论(0) 推荐(0)
摘要: 点差分 让x到y所有的点++; sum[x],sum[y],sum[lca(x,y)]--,sum[fa[lca(x,y)][0]]--; 边差分 让所有的边下降到点,每个点代表与其父亲连接的点 sum[x],sum[y],sum[lca(x,y)]-=2; #include<bits/stdc++ 阅读全文
posted @ 2021-11-02 12:45 m_rd 阅读(30) 评论(0) 推荐(0)
摘要: FHQ treap 概念 分裂 根据某个数 分裂为两棵树 合并 两棵树和为一棵树 /*made in mrd*/ #include <bits/stdc++.h> using namespace std; const int N = 2e6 + 10; #define int long long # 阅读全文
posted @ 2021-11-02 12:43 m_rd 阅读(53) 评论(0) 推荐(0)
摘要: 题意 有两种操作 操作0:大于k的数字x,然后找到x与k第一次不相等的位数然后反转后面 操作1 查询[l,r]的个数 输入 1 6 3 1 2 3 4 5 5 1 3 6 0 3 1 3 6 输出 4 3 思路 翻转操作用tg标记一下,懒标记,每次统计跑一遍trie树 代码 /*made in mr 阅读全文
posted @ 2021-11-02 12:43 m_rd 阅读(54) 评论(0) 推荐(0)
摘要: 分析 平衡二叉树 set/map 红黑树(代码长) == splay(代码适中,支持很多操作) treap(有局限,一些操作做不了) AVL 多叉树 B树 B+树 操作: 左旋 右旋 (维护的是中序遍历不变) 右旋 -> z z / // y x / \ / \\ x c A y / \ // \ 阅读全文
posted @ 2021-11-02 12:42 m_rd 阅读(36) 评论(0) 推荐(0)
摘要: KMP模板 网上模板 next数组代表这一位匹配到下一位的位置 void get_nxt { nxt[0]=-1; int i=0,j=-1; while(i<len) { if(j==1||a[i]==a[j]) { i++,j++; nxt[i]=j; } else j=nxt[i]; } } 阅读全文
posted @ 2021-11-02 12:41 m_rd 阅读(26) 评论(0) 推荐(0)
摘要: 前置知识 微扰贪心 例题 国王游戏 耍杂技的牛 耍杂技的牛 证明 DP codeforces 分析 对于两道题t1,t2来说,有两种做题顺序,如下图的C12,C21,我们定义P1为t1的每分钟减小的分数,T1为做题需要的时间 两道题的初始总分数为sum(最大分数之和) 则 得分C12=sum-T1P 阅读全文
posted @ 2021-11-02 12:40 m_rd 阅读(48) 评论(0) 推荐(0)
摘要: B 题意 给你一个数,找到一个可以整除某个数任意一位的数 分析 1 2 3 4 5 6 7 8 9的lcm是2550,说明最大就是2550暴力即可 代码 #include <bits/stdc++.h> #define ll long long using namespace std; int ma 阅读全文
posted @ 2021-11-02 12:37 m_rd 阅读(35) 评论(0) 推荐(0)
摘要: A 题意 给你n个人每个人有一个区间然后再给你那个人必须在那个人前面,最后让你找出一个合法方案 分析 代码 #include<bits/stdc++.h> #define fnq freopen("input.txt","r",stdin) using namespace std; typedef 阅读全文
posted @ 2021-11-02 12:34 m_rd 阅读(29) 评论(0) 推荐(0)
摘要: D - Shortest Common Non-Subsequence 题意 给你两个子串找到一个最短没有出现过的子序列并且字典序最小 分析 序列自动机 nxt[i][j] 代表第i个位置 第j个字符的位置 nxta[lena+1][0]=nxta[lena+1][1]=lena+1; nxtb[l 阅读全文
posted @ 2021-11-02 12:29 m_rd 阅读(98) 评论(0) 推荐(0)
摘要: 后缀数组学习 后缀数组学习博客 代码 /*made in mrd*/ #include<bits/stdc++.h> using namespace std; const int N=2e6+10; #define int long long #define mem(a,b) memset(a,b, 阅读全文
posted @ 2021-11-02 12:28 m_rd 阅读(35) 评论(0) 推荐(0)
摘要: Palindrome Function 题意分析 给定左区间和右区间在k进制下是回文数有多少 分析 考虑每一个进制下的区间合法方案 代码 /*made in mrd*/ #include<bits/stdc++.h> using namespace std; const int N=2e5+10; 阅读全文
posted @ 2021-11-02 12:26 m_rd 阅读(57) 评论(0) 推荐(0)
摘要: 思维 1.Binary Strings 简单分析 从后往前考虑每一位如果这一位有1就直接填1否则填0减1 2.Distance on Large Perfect Binary Tree 简单分析 考虑m能有多少种组合对能有所有组合的节点算一遍答案 最后*2 Level Up 简单分析 背包问题 存第 阅读全文
posted @ 2021-11-02 12:22 m_rd 阅读(30) 评论(0) 推荐(0)
摘要: 1.线段树 Max or Min 题解 2.CF 751 750 3.机器人复赛 4.写博客 题目 题目 阅读全文
posted @ 2021-11-02 11:13 m_rd 阅读(30) 评论(0) 推荐(0)
摘要: #### 1.线段树 [Max or Min](https://vjudge.net/contest/340727#problem/A)##### [题解](https://www.cnblogs.com/et3-tsy/p/14099236.html)#### 2.CF 751 750#### 3 阅读全文
posted @ 2021-11-02 11:11 m_rd 阅读(30) 评论(0) 推荐(0)