笔记

一.区间相关

  • 区间和:前缀和
  • 区间增减:差分+前缀和
  • 单调区间:二分查找
  • 区间可加:线段树
  • 复杂区间操作:分块
  • 数列中出现删除操作:链表

二.搜索相关

  • 最优性剪枝:当前代价大于目前求得的最小代价
  • 可行性剪枝:明显不符合题意,或估算最小代价,大于已求则返回(最优性)
  • 优化搜索顺序:题目中明显指出(如用最少物品填满),进行排序后再搜索
  • 不入流剪枝:能剪就剪,但是不能牺牲正确性,也不能效率太低,会得不偿失
  • 广搜记得出队,v数组记录是否在队里,避免重复入队;深搜处理好边界,v数组记录是否访问过

三.输入输出

  • long long、int
  • 输入和输出使用printf和scanf是,记得让“%x”和变量类型匹配,不要前面是long long ,后面就成了 %d
  • cin>>a 返回:a==EOF?0:1;
  • scanf("%d",&a) 返回: a==EOF?-1:读入数的个数

四.STL

1.upper_bound&;lower_bound

  • lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

  • upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标


五.图论

  • 有向图和无向图

六.其他

  • 有多组数据时要记得清零
  • 线段树开四倍空间
  • unsigned long long [0,2^64-1],long long [-263,263-1],
  • printf/scanf:
%变量类型/输出特点
%lfdouble
%cchar
%sstring,char[]
%.4lf保留四位小数
%lluunsigned long long
%%%
  • 线段树左子区间带等号,右子区间不带(l,mid)(mid+1,r)
  • 线段树在修改、建树回溯之后记得维护性质
  • 数组小心下标越界 a[-1]
  • 满足运算结合律的,可以考虑倍增
  • 262144个int是一MB
  • (s-1)&S可以枚举S的每个子集(2进制)
posted @ 2020-11-18 21:02  actypedef  阅读(22)  评论(0编辑  收藏  举报