1.unique函数
加入a为一个数组,n为数组长度,先将a数组sort一下,然后int k=unique(a,a+n)-a;这样就去掉了a中连续且相同的元素,k中就保存了a中去重以后的元素个数,常用于扫描线的离散化
2.lower_bound函数
这个函数以二分的形式来查找容器中相应值所在的位置,比如lower_bound(a,a+n,val),就在a数组中,a+n的长度内寻找第一个大于或等于val的元素位置,用int k=lower_bound(a,a+n,val)-a,来获得符合该条件的元素下标,学长说如果用stl容器时用这个函数就直接调用容器的.lower_bound(),这样会快得多
3.short
不要小看这个数据类型,在大规模数据要用哈希的题中,卡内存的时候就要用short来存储结果了,mark一下
4.离散化
这个技巧贯穿于扫描线,而且可以大大降低时间复杂度和空间复杂度,原理和做法可以在我之前的扫描线文章中找到,如果负责数据结构的童鞋一定要掌握吧
5.各种模板的使用
熟记各种题是几乎不可能的,这时候我们就需要总结些模板,这些最好是自己看一些博客自己总结,不要套用别人的不然可能比赛中要理解一阵子耗时间,常用的模板要在比赛前打印出来或者记在本子上,目前为止我接触到的常用的模板有:归并排序求逆序对模板,筛法素数打表模板,快速幂模板,母函数模板,扫描线模板,以及最短路一些套路算法和最小生成树的几个算法
6.二分查找
随着题目难度增加,要习惯只要数据一大就二分,二分效率很高,当然二分的前提是有序
7.DEBUG
经常在写完代码的时候测试莫名其妙出问题,这时最好的方法不是什么单步跟踪,而是在可能会出错的地方printf一些提示,这样就能发现错误了
8.数据范围炒鸡大
这个时候一般就不涉及什么算法和数据结构了,一般不是推公式就是找规律,如果数学不好就写个搜索算法找规律吧少年
9.推荐一些博客(后续更新)
想学线段树的同学,我看过一个博主的博客讲的很细也很好,mark一下:http://blog.csdn.net/zearot/article/details/48299459