摘要: https://www.luogu.com.cn/problem/P2168#ide #include<cstdio> #include<cstring> #include<queue> #include<algorithm> #define ll long long using namespace 阅读全文
posted @ 2026-03-02 23:03 曾翎一 阅读(1) 评论(0) 推荐(0)
摘要: https://www.luogu.com.cn/problem/P1801#submit #include <cstdio> #include <queue> #define Qmax priority_queue<int> #define Qmin priority_queue<int,vect 阅读全文
posted @ 2026-03-02 23:00 曾翎一 阅读(3) 评论(0) 推荐(0)
摘要: 1\priority_queue 是大根堆,priority_queue<int,vector,greater> 是小根堆 2、对顶堆的算法一定要掌握!! 阅读全文
posted @ 2026-03-02 22:47 曾翎一 阅读(1) 评论(0) 推荐(0)
摘要: 对于a[i+1]=a[i]+1的问题,通常做法都是b[i]=a[i]-i,这样问题就变成了找连续的相等数组。最小的操作数一定是把它变成该数组的中位数。经典问题了。找中位数可以用树状数组实现,在树状数组上二分即可。计算操作数可以分成两个部分计算,假设区间[l, r],中位数的下标为mid,中位数的值为 阅读全文
posted @ 2026-02-23 11:45 曾翎一 阅读(3) 评论(0) 推荐(0)
摘要: 我们用并查集求最大值,然后看有多少个没有闭环的并查集(有邻居数<=2的就是未闭环),设未闭环的总共有num个。若num>0,那么答案就是cnt-num+1个。注意每一次要状态恢复 #include<bits/stdc++.h> using namespace std; const int N=2e5 阅读全文
posted @ 2026-02-19 20:57 曾翎一 阅读(4) 评论(0) 推荐(0)
摘要: 这道题教会了我并查集是可以动态删改的,关键在于判断其是否是连通分量的代表 #include<bits/stdc++.h> using namespace std; typedef long long LL; LL t,n,m1,m2,ans,a[500005],b[500005],fag[50000 阅读全文
posted @ 2026-02-02 21:41 曾翎一 阅读(1) 评论(0) 推荐(0)
摘要: https://codeforces.com/problemset/problem/2072/E 这个相等条线等价于这两个点横坐标或者纵坐标是相同的。所以就是求三角数,用while把他暴力拆成若干个i*(i-1)/2就可以了。 #include<bits/stdc++.h> using namesp 阅读全文
posted @ 2026-01-24 18:43 曾翎一 阅读(4) 评论(0) 推荐(0)
摘要: https://codeforces.com/problemset/problem/2106/D 解题思路:我们不光要求前缀,还要求后缀。我们可以用前后缀分别来维护a[N]大于b[N]的数目,到时候这届如果前缀数不够的话我们就直接拼起来看行不行。 #include<bits/stdc++.h> us 阅读全文
posted @ 2026-01-24 16:16 曾翎一 阅读(5) 评论(0) 推荐(0)
摘要: https://qoj.ac/contest/2562/problem/14692 双指针,这种感觉像O(n2)的都是双指针来做的。但是指针的移动你一定要看仔细了,要画图。先是l和r都要移动来保证长度,然年后进行判断,区间一定是连续的,因为这个要符合贪心。 #include<bits/stdc++. 阅读全文
posted @ 2026-01-21 17:56 曾翎一 阅读(7) 评论(0) 推荐(0)
摘要: 我们以 n=7264 为例。 因为我们的任务是求 1−n 的数码之和,考虑对问题进行拆解: 求出 1−6999 的数码之和 求出 7000−7264 的数码之和 为什么这样拆?看下去就知道了。 对于第一部分:我们可以进行DP 约定 f(i,j) 为 i 位数,其中最高位是 j 的, 1− j99.. 阅读全文
posted @ 2026-01-19 15:52 曾翎一 阅读(5) 评论(0) 推荐(0)