自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 牛客多校二

Counting Triangles这道题题意是算有多少三边颜色完全相同的三角形,比赛中模拟三重循环得出答案,显然会超时正确的题解,既然要算有多少个三边颜色完全相同的三角形个数,那等同于三角形个数-有异色边的三角形个数,有异色边的三角形则是有俩个点的其中俩条边是异边,就是对于每个点算它有多少个异边相加/2,这个通过计数黑色的点的总数*白色的点的总数得到.#include<bits/stdc++.h>typedef long long ll;namespace GenHelper {

2022-03-27 08:36:00 198

原创 牛客多校四

c题晚了一分钟交就不再多写[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xguvvWyx-1648341277048)(https://uploadfiles.nowcoder.com/images/20210726/728856466_1627312025173/249D2BDBDFCE405071D53BC3C031F075 “图片标题”)]i题 Inverse Pair比赛的时候不会归并排序减小复杂度,补个归并排序的板子void merge_sort(int st

2022-03-27 08:34:50 396

原创 杭电多校一

Maximal submatrix这道题的题意就是求已知矩阵的最大单调不下降矩阵,比赛中只会用暴力的方法,tle了看了题解,说是转化为01矩阵,然后用悬线法求出,太菜了,表示没听过,网上学了一波,先将悬线向上拓展到最大,然后尽量向左右拓展,具体运用这道题的话就是,先得出每个点的深度(指从上而下目前得不下降长度),对于每一行的点,从左至右,求出该点在深度最大的情况下的左右宽度,相乘则得出最大矩阵个数.#include<bits/stdc++.h>using namespace std;

2022-03-27 08:34:00 206

原创 杭电多校二

1001 I love cube一道数学题吧,其实比赛的时候没太看懂题,n=3,实在数不出72个等边三角形,n=4有288个,n每加一,多出n^3*8个等边三角形,这道题的规律就是对于n个结点的正立方体,1~n-1个(n-i)*8相加#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod = 1e9+7;ll n;ll ans;int main(){ int t; c

2022-03-27 08:33:24 163

原创 杭电多校三

1007 Photoshop Layers比赛的时候想着模拟,tle了,想到m[i]为1则前面无论如何都变成当前的数,结果还是tle了,最后修修整整也没想到正解,正解其实就是因为从m[i]为1从后再将每个数相加和255比较,所以提前处理,将所有的数先加起来,到每求一个区间再相减,就不想每次都再算,大大降低复杂度,还有一个就是%X十六进制的这个,比赛的时候字符串转数字再转字符串太麻烦了,也是没想到这个,学到了.下次有十六进制数的时候考虑一下这个.#include<bits/stdc++.h&gt

2022-03-27 08:32:19 1021

原创 杭电多校四

Calculus试了很多很多次,高数还是忘光了,没想到全部都是收敛的,知道这个就简单了#include<bits/stdc++.h>using namespace std;#define int long longstring split="+";string s[100];int pos,k;signed main() { int t; scanf("%lld",&t); while(t--) { string strs; cin>>strs

2022-03-27 08:30:55 67

原创 逆序对(树状数组实现)

树状数组求逆序对#include<bits/stdc++.h>using namespace std;#define int long longint n,m;int c[500005],a[500005]; vector<int> all;int lowbit(int x){ return x&(-x);}void updata(int i,int v){ while(i<=n){ c[i]+=v; i+=lowbit(i); }

2021-10-02 08:35:44 112

原创 树状数组板子

树状数组的俩个板子1.单点更新-区间查询#include<bits/stdc++.h>using namespace std;#define int long longint n,m;int c[500005],a[500005]; int lowbit(int x){ return x&(-x);}void updata(int i,int v){ while(i<=n){ c[i]+=v; i+=lowbit(i); }}int ge

2021-10-02 08:00:03 143

原创 P7167 [eJOI 2020 Day1] Fountain(单调栈+倍增)

P7167 [eJOI 2020 Day1] Fountain题目描述:对于一个喷泉,它有n层,每层有di的直径和ci的容量,对于m次查询,从index开始,总量有sum,问最后能流到哪一层,直径大的只能流向下一次直径比他大的或者水池.思路:先利用单调栈找到每一个圆盘能流向的下一个圆盘,通过倍增的想法存储当前圆盘流向的第二个圆盘,第四个,第八个…然后就能找到这一条流向的路,建一个二维数组保存倍增的区间和,然后对于每一次查询模拟即可#include<bits/stdc++.h>usin

2021-10-01 08:34:52 382

原创 Codeforces Round #745 (Div. 2)(A~B)

A. CQXYM Count Permutations题目描述:对于给定的一个n,长度为2n的序列,值包含[1,2n]中的每一个,对于i,a(i+1)>a(i)为符合条件的点,问形成不少于n个这样点的序列有多少种排列方案思路:严格来说不能算题解,因为我是猜的,a(i+1)>a(i)与a(i)<a(i+1)其实可能性是一样的,找到一个长度至少为n,然后看的note,觉得就是累乘的一半,给的样例也足够的大,方便测试方法的更行性,直接上手敲,不过得注意取余,假如105/2对100取余,如

2021-10-01 08:13:11 96

原创 Codeforces Round #744 (Div. 3)(A-E2)

首先,庆祝自己上了绿名A. Casimir’s String Solitaire题目描述:一个字符串包括A,B,C三种字符,有俩种操作可以选择1.删除一个A和一个B2.删除一个B和一个C问最后能不能将这个字符串清空思路:统计A,B,C的数量为a,b,c,b=a+c则YES,否则NO#include<bits/stdc++.h>using namespace std;#define int long longsigned main(){ int t; cin&gt

2021-10-01 07:48:02 259

原创 P1428 小鱼比可爱(树状数组)

P1428 小鱼比可爱题目描述:给定一个序列的????,对于每条????打印前面有多少????比它丑思路:这道题本来是一道入门水题的,因为数据量小,数据量大的话可以用树状数组写对于输入的数据将它存在数组 中,因为存在0的情况,而树状数组下标从1开始,a[1],a[2],a[3]…代表前面0,1,2出现的次数,如果该点等于x的话,则之前[1,x-1]出现的次数为该题的答案.这个可以用树状数组的区间和函数在O(logn)时间上完成,然后更新该值出现的次数,这个时间复杂度也是O(logn)#inclu

2021-09-30 16:04:22 221

原创 P2251 质量检测(ST表)

P2251 质量检测题目描述:对于n个零件,依次打印[1,m]-[n-m+1,n]的最小值思路:#include<bits/stdc++.h>using namespace std;#define int long longint f[100005][20];int a[100005];void init(int a[],int n){for(int i=1;i<=n;i++)f[i][0]=a[i]; for(int j=1;1<<j<=n;j++

2021-09-30 08:36:19 122

原创 P3865 【模板】ST 表

P3865 【模板】ST 表模板题,话不多说,之间贴代码#include<bits/stdc++.h>using namespace std;#define int long longint f[100005][20];int a[100005];void init(int a[],int n){ for(int i=1;i<=n;i++)f[i][0]=a[i]; for(int j=1;1<<j<=n;j++){ for(int i=1;i+

2021-09-30 08:11:49 72

原创 P7333 [JRKSJ R1] JFCA(st表+单调栈+二分)

P7333 [JRKSJ R1] JFCA这种区间找最近点我首先考虑使用单调栈/单调队列,因为ai与bi在不同的位置,想了一下感觉行不通,可以用st表存储ai的最大值,通过二分查找找到第一个大于所求的点下标,因为是一个环,我将数组复制三份(后面想想感觉原数组前面存储数组的后半部分,原数组后面再多存储数组的前半部分就行了吧),通过找到左边第一个和右边第一个符合条件的点,再比较一下,就可以得出该点的答案.#include<bits/stdc++.h>using namespace std;

2021-09-30 08:06:33 225

原创 leecode42. 接雨水(单调栈+前缀和)

leecode42. 接雨水题目描述:给n个高度不同的柱子(可为0),求能积水的容量思路:如果俩个稍高的柱子中有一个比它们俩低的柱子,则能积水,积水的容量为最低的柱子高度-当前的柱子高度,观察样例,发现对于当前的点找到右边第一个比它高或者等于它的点,这个时候可以得出这一区间的容量,通过单调栈可以找到右边第一个比它高或者等于它的点,通过前缀和可以得出这一区间的高度和,然后进而得出这一区间的积水量.麻烦的是找到一个最高点后,后面没有比它小或者等于它的数,所以又从n为起点来一次,算它们之间区间的积水量cla

2021-09-29 10:13:11 134

原创 leecode739. 每日温度(单调栈模板)

每日温度单调栈模板题,没啥说的,本来不想写,还是养成一题一题解的习惯吧class Solution {public: vector<int> dailyTemperatures(vector<int>& temperatures) { stack<int> sx; vector<int> ans(temperatures.size(),0); for(int i=0;i<temp.

2021-09-28 16:38:36 89

原创 java集合

java集合的概念:对象的容器,定义了对对象进行操作的常用方法.java集合不同于数组的是:数组的长度固定,而集合不固定,数组可以存储基本类型和引用类型,而集合只能存储引用类型.提到这个,就回忆一下基本类型和引用类型.集合想存储基本类型的时候可以进行装箱操作.基本类型:整数类型:long,int,short,byte浮点类型:float,double字符类型:char布尔类型:boolean引用类型:引用类型非常的多,大致包括:类,接口类,数组,枚举类型,注解类型,字符串型,总之非基本类型

2021-09-28 15:23:42 74

原创 P2422 良好的感觉(单调栈+前缀和)

P2422 良好的感觉题目描述:对于给定的序列,找到区间和与区间最小值乘积最大的区间思路:对于一个点作为最小点的话,覆盖它的区间越大则所求值越大,解决方案就是枚举每一个点作为最小值点,扩大区间,使得区间和最大,可以通过单调栈找到该点的左边界和右边界,前缀和得出该区间的区间和.#include<bits/stdc++.h>using namespace std;#define int long longint a[100005],sums[100005],lefts[10000

2021-09-28 13:06:51 231

原创 P1725 琪露诺(单调队列优化dp)

P1725 琪露诺题目描述:n+1个格子,从0开始,从当前位置可以跳到[i+l,i+r]位置,每个位置有冰冻指数,问达到n之后的位置可以得到最大的冰冻指数是多少思路:写过类似的题,考虑用dp,设j属于区间[i-r,i-l] dp[i]=max(a[i]+dp[j],dp[i]),但题目数据过大n*(r-l)有t的可能,然后发现这个递推式其实就是在[i-l,i-r]区间内找到一个最大的值,这个可以使用单调队列维护#include<bits/stdc++.h>using namespa

2021-09-28 11:29:07 247

原创 P1311 [NOIP2011 提高组] 选择客栈(贪心+二分)

P1311 [NOIP2011 提高组] 选择客栈题目描述:色调相同的俩个客栈,且俩个客栈之间咖啡馆的最低消费符合条件的选择客栈的方案数,思路:枚举每个点作为第二个客栈,对于第一个客栈的要求是色调相同且之间有符合条件的咖啡馆.我的想法是开一个数组存下每个色调的点的下标,只要该下标与枚举点的下标之间存在符合条件的咖啡馆即可,找到枚举点左边第一个符合条件的咖啡馆,然后统计符合条件的下标,就是与枚举点符合要求咖啡馆数量,通过二分查找能快速得出答案.这样总的时间复杂度就是O(n*logn)#includ

2021-09-28 09:01:25 323

原创 P6140 [USACO07NOV]Best Cow Line S(贪心模拟)

P6140 [USACO07NOV]Best Cow Line S从俩边取字符组成字典序最小的序列,一想就是贪心,比较俩边取更小的字符就好了,不过得注意的是碰到相等的情况得继续向比,找到不相等的为止,通过双指针可以完成这个操作,当时我是特判了left>=right,后面看题解发现可以不用特判.解决问题会有想暴力完成的想法,而不是去尝试将这些点合并起来,以后写题过程多注意.`#include<bits/stdc++.h>using namespace std;#define int

2021-09-28 07:24:16 111

原创 P6510 奶牛排队(单调栈+二分)

P6510 奶牛排队 该题要求找出符合条件的最多奶牛数,条件是A作为左端点最矮,B作为右端点最高,中间不能有与A,B相同身高的奶牛,枚举每个端点作为预备B端点,则A端点一定在左边比B端点高的奶牛的后面,也就是找到左边第一个比该点大的数,这个可以用单调栈完成,这个点暂时称为X点,接下来,找A端点,A的条件是在A-B之间没有比它矮的,也就是X-B之间最小的点,该点到B的距离为最长,难点来了,如何维护呢,看完别人的题解才知道,可以用俩个单调栈来维护,通过单调递减栈找到左边第一个大于B的点x,而如何找到x点

2021-09-27 15:25:06 671

原创 P1714 切蛋糕(单调队列+前缀和)

P6510 奶牛排队一开始会想用dp解决,跟最大子序列相似,

2021-09-27 15:02:02 192

原创 排序的总结

1. 插入排序插入排序只是交换相邻数组的值,是个稳定的排序方法,时间复杂度为O(n*2),输人数据的顺序能大幅影响它的复杂度,整个数列有序且与排序方向一致则复杂度最小.#include<bits/stdc++.h>using namespace std;#define int long longint* insertSort(int a[],int n){ for(int i=0;i<n;i++){ int j=i-1; while(j>=0){ if(a

2021-08-27 22:25:50 67

原创 链表的总结

链表总结通过刷一些链表的题,对于指针和结构体有了更深的理解一些基础题有:反转链表合并链表删除节点一些需要思考的如:环形链表(利用哈希表存储)找到链表环的入口(快慢指针,相等时,让一个指针从head出发,它将于low在入口相遇,利用数学知识证明)找到倒数第k个节点(双指针,俩个指针都从头开始,不同的是一个指针晚出发k次)俩个链表的第一个相同节点俩数相加反(给短的链表补充0,然后相加,记得进位就可以了)俩数相加正(先反转链表,再按逆序的写,再反转,看题解优解是

2021-08-17 10:11:01 107

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除