二维前缀和、二维差分
二维前缀和二维前缀和可以快速查询二维数组任何范围上的元素累加和。如下图红色区域总和为:10我们就可以使用二维前缀和得到。下面先讲使用方法: 先将原数组复制一份 对每一个元素进行遍历,将遍历到的元素=(元素的左边一个元素)加(上面一个元素)减去(左上角的一个元素)加上(元素自己本身)。如图: 即”左加上加左上减,加自己“ 那么如果我们想得到红色框里面的元素总和,我们只需要用新数组(下图)的绿色-蓝色1-蓝色2+紫色 12-1-2+0=9那么原理呢?下图:(容斥原理)新数组中的元素代表什么呢?从左上角到元素的区域累加和。我们的数组按箭头顺序遍历,那么遍历到了问号的时候,前面的部分数组都已经是更改后的了,那么上述式子则表示绿色区域总和-蓝色区域1总和-蓝色区域2总和+重复的紫色区域总和,结果等于红色区域的总和 总结性笔记 目前是预处理出一个结构,以后每次查询二维数组任何范围上的累加和都是O(1)的操作1.根据原始状况,生成二维前缀和数组sum, sum[i][j]:代表左上角(0,0)到右下角(i,j)这个范围的累加和 sum[i][j]+=sum[i][j-1]+sum[i-1...
优先队列笔记与例题
优先队列优先队列的本质是一个堆(用数组模拟一颗完全二叉树)可以拿出优先级最大的元素头文件<queue>优先级最高的都在顶端(堆顶元素)12345678910int main(){ priority_queue<int> que; //默认大根堆(大顶堆)(数字越大,优先级越高),比较方法less<int> priority_queue<int,vector<int>,greater<int>> que;//参数二是什么容器装,参数三是比较方法,变成小根堆(小顶堆)需要指定node类型,只能重载小于号 struct node{ int x,y; bool operator<(const node &b)const{ return this->x <b.x;//重载小于号less,大的数还是优先级更高,若重载大于号,小的数优先级更高 } }}que.size() 堆的元素个数que.push() 插入元素que.pop...
一维差分笔记与例题
背景当你有一个数组,你要频繁地向里面的不同区间的数字进行加减的操作,比如说{3,1,4,1,5,9},你要向[0,2]减去二,变成{1,-1,2,1,5,9},然后向[1,3]加上2,变成{1,1,4,3,5,9},然后向[4,5]减去4变成{1,1,4,3,1,4},然后向[3,3]减去2……??????当这种操作数量足够多,需要频繁的区间更新,如果我们使用简单的遍历,对这些数字进行加减,那速度会非常慢。 解决方案使用一维差分 差分数组:对于一个给定的原始数组 nums,我们构造一个相同长度的差分数组 diff,其中:对要操作的区间开始的数字进行操作,对操作结束后的数字进行反向操作。作为一个差分数组diff,记录区间更新,在全部操作结束后,我们只需要对原数组进行一次遍历,让diff的后一位,累加到原数组里面,那么在区间内所有的数都会受到diff影响,在区间后,由于diff的反向操作,会抵消掉区间更新。 例题洛谷 P2367 语文成绩题目背景语文考试结束了,成绩还是一如既往地有问题。 题目描述语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。她总是要一遍遍地给某些同学增...
大一软工第五周学习总结(国庆周)
大一软工第五周学习总结(国庆周)学习内容 Java在写一个华容道的小游戏,目前写了一半,还没有想出来如何解决华容道无解的问题,目前由于有其他计划,Java学习的速度减缓。 在我校ACM校队招新期间,学长安排我们做每日两题,目前进行了5次,一共8道题: B2002 Hello,World! P1046 [NOIP 2005 普及组] 陶陶摘苹果 P8680 [蓝桥杯 2019 省 B] 特别数的和 P8598 [蓝桥杯 2013 省 AB] 错误票据 P8706 [蓝桥杯 2020 省 AB1] 解码 P1115 最大子段和 P1106 删数问题 P8637 [蓝桥杯 2016 省 B] 交换瓶子 其实刚开始写这些东西挺苦恼的,再加上我没有学习c的基础上我直接用c语言写题。(我的代码在我的网站上都能找到,全丢上去了,排版我觉得还行,我自己能根据想要的题目很快找到我写的代码,旁边有快捷目录的) 相应的,我看了三十来页的C语言程序设计基础(慕课版) 在深思熟虑后,我停下了这个动作,转去看C++primer第五版,看了二十多页 假期我花了比较多的时间在我的网站上面,添加了内容。 总...
我的第一次厚涂
第一次尝试厚涂,虽然……但已经很满意了(耶… 当然也可以来bilibili看我的绘画过程视频,感谢你的支持!
大一软工第四周学习总结(正课第二周)
大一软工第四周学习总结(正课第二周)正课内容高数课: 无穷小和无穷大 极限运算法则 极限存在准则 两个重要极限 无穷小的比较 函数的连续性和间断点计算机导论:一些python基础代码,上机课就自己敲程序设计基础:一些c语言基础代码,上机课就自己敲,有些简单算法题写了些这周课程内容已经步入正轨了,只是刚开始学,内容非常简单。课外内容 继续复习Java基础,学习了面向对象相关知识: static 继承 多态 包 final 权限修饰符 代码块 抽象类 接口 内部类 每天都听了一些英语听力 一个朋友推荐了计算机导论的cs50课程,我其他东西学累了就看看,感觉很有意思 总结与想法我的学习和生活的节奏稳定了下来,学习效率变高了 后续计划我们学校有ACM校队和爪哇部落算法部招新,考核有五轮,但是要求c++,我有意愿想要加入,所以打算阶段性的中断我的Java学习计划,同步搞一下c/c++和算法。招新那边的学长学姐推荐了一本书,C语言慕课版的。好在只是计划有点中断,并没有打乱,后续我任然打算在下个学期开始前学完Java大部分的技术栈
大一软工第三周学习总结(正课第一周)
大一软工第三周学习总结(正课第一周)正课内容高数课:复习了函数相关知识、学习了数列的极限、函数的极限计算机导论:就讲了一点计算机组成相关的知识,还有一些学习方法程序设计基础:一些前置知识,然后上机用c写了几个简单的程序总体来说,第一次上正课,基本上都没有讲多少内容,计算机导论和程序设计基础的内容和已有知识基本重复。 课外内容 继续复习Java基础,学习了String,ArrayList类包括构造,常用方法以及对应的底层原理相关知识。 利用现有的前端框架部署了一个个人网站,并在上面发blog。 学习了git的基本用法(以后会把写的代码,包括垃圾代码文件一坨一坨地丢上去) 用c写了一些经典地算法题来熟悉语法 总结与想法第一次上这些正课,感觉和预期相比相差较大,有种课堂利用率过于低下的感觉,不过第一节课基本上都在讲学习方法,课程介绍。自学部分效率比较正常,学习时间正常。 后续计划总体上和上次差别不大,但是由于这一周接触的想法比较多,会有一点动摇,我可能会在java二刷多一小段时间后同步进行算法的学习与练习。目前打算看哔哩哔哩左程云的视频https://space.bilibili.c...
我的个人学习计算机历程(开始)
> 注:随着大学期间认知的不断改变,当初写下的想法与计划只是当时的,有时候回看会觉得有点笨拙可笑,因此仅供参考,后续想法的改变以及计划都会在本文评论区以及后续周总结进行跟进,想了解后续请移步周总结! 25级软件工程大一学生个人计算机学习历程一个25级大一的软件工程新生,对计算机感兴趣,对未来有规划并且有一定的执行力,但是由于自己的认知仍然有限,我会一边执行计划,一边对未来的计划进行修改。 写这个博客的目的 一是希望大家看到我的博客后,如果对我的学习或者其他未来规划有什么建议,可以对我提出,我会十分感激。 二是希望能将自己日后的学习历程进行总结规划。 三是希望我的博客可以帮助到大家,希望后来的学弟学妹们在感到些许迷茫的时候,看到我的博客可以有所收获。 个人学历及专业情况高考失利,一所广东的二本院校(但是经过几天的相处,我很喜欢这个学校),专业为软件工程。 学习情况目前为刚刚开学的状态,还没有发教材,没有选课,没有上过正课,只是刚刚开完新生大会,但是由于自己的兴趣爱好,在高一的时候就自学Java基础,过完了一门语言的基础,并且将python作为自己的工具在使用中。但是当时...













