摘要:rt,所以涉及到负数的时候,一定要强制类型转换。 为了方便,还是全部都强制类型转换为有符号整形。 阅读全文
posted @ 2021-01-14 20:18 wrjlinkkkkkk 阅读(11) 评论(0) 推荐(0) 编辑
摘要:#1 sort(box.begin(), box.end(), [](const vector<int>& a, const vector<int>& b) { return a[0] < b[0]; }); #2 sort(box.begin(), box.end(), cmp); static 阅读全文
posted @ 2021-01-12 22:02 wrjlinkkkkkk 阅读(4) 评论(0) 推荐(0) 编辑
摘要:#例一 求一组数的lis f[i]为必选a[i]的lis长度 class Solution { public: //low[i]代表长度为i的lis的结尾的最小值 int LIS(vector<int>& a) { int n = a.size(); int cnt = 0; vector<int> 阅读全文
posted @ 2021-01-12 21:25 wrjlinkkkkkk 阅读(5) 评论(0) 推荐(0) 编辑
摘要:复杂度O(N)的非负整数排序 class Solution { public: void radixSort(vector<int>& nums) { int n = nums.size(); int exp = 1; vector<int> buf(n); int mx = *max_elemen 阅读全文
posted @ 2021-01-11 22:17 wrjlinkkkkkk 阅读(6) 评论(0) 推荐(0) 编辑
摘要:lwb和upb分别返回第一个大于等于和第一个大于x的位置 返回的位置可能会越界 阅读全文
posted @ 2021-01-07 19:02 wrjlinkkkkkk 阅读(14) 评论(0) 推荐(0) 编辑
摘要:#题意 rt #思路 删除所有可删的$s_i$,其中$s_i>s_{i+1}$ 这个过程可以用栈解决 由于题目要求每个出现的字符出现在答案中一次 所以要维护某字符是否在栈中,以及之后是否还有这个字符 #代码 class Solution { public: string smallestSubseq 阅读全文
posted @ 2021-01-05 22:42 wrjlinkkkkkk 阅读(10) 评论(0) 推荐(0) 编辑
摘要:#题意 给你n和p,还有n个p的指数,问你怎么分可以让AB两个集合的和的差最小,n,p<=1e6,答案需要模1e9+7 #思路 分成两组的问题参考51nod2334,朴素方法是背包或者dfs 但这题是在p进制下的,可以想到贪心的策略: 从大到小进行分配,每次将$p^{a[i]}$分配到当前的和比较小 阅读全文
posted @ 2020-06-05 11:55 wrjlinkkkkkk 阅读(186) 评论(0) 推荐(0) 编辑
摘要:#题意 一个1e5的double数组,前面大的元素会挡住后面小的元素,有1e5个操作,每次改变一个元素的值,问你每次改完之后有多少元素没有被挡 #思路 考虑分块,对每一个块维护一个单独的答案,那么总的答案一定是各块单独的答案的一部分合起来 每次修改之后只需要重新计算本块的答案,并且对每一块二分接上的 阅读全文
posted @ 2020-05-28 16:59 wrjlinkkkkkk 阅读(65) 评论(0) 推荐(0) 编辑
摘要:#题意 给你一组正整数,从i位置可以走到i+a[i],两种操作: 1.从x走几步能走出n 2.将某个a[x]改为y #思路 考虑分块,分块大小为根号n,那么每个点需要处理:出本块需要的步数、出本块到达的地方 对于每一块内的元素,维护的这两个信息都是独立的 那么对于操作1:模拟一遍块间移动即可,复杂度 阅读全文
posted @ 2020-05-27 22:36 wrjlinkkkkkk 阅读(68) 评论(0) 推荐(0) 编辑
摘要:#题意 1e6的数组,1e6组询问,每次问你[l,r]内有多少个数出现超过了1次 空间128M #思路 主席树可以很轻松地解决这个问题,但是1e6,128M显然空间是不够的,所以我们要找别的方法 数组长度有1e6,根号级的算法也不能使用 我们考虑离线: 在左端点不变时,考虑用树状数组维护右端点在不同 阅读全文
posted @ 2020-05-26 13:04 wrjlinkkkkkk 阅读(71) 评论(0) 推荐(0) 编辑