预编译
#pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize("Ofast") #pragma GCC optimize("inline") #pragma GCC optimize("-fgcse") #pragma GCC optimize("-fgcse-lm") #pragma GCC optimize("-fipa-sra") #pragma GCC optimize("-ftree-pre") #pragma GCC optimize("-ftree-vrp") #pragma GCC optimize("-fpeephole2") #pragma GCC optimize("-ffast-math") #pragma GCC optimize("-fsched-spec") #pragma GCC optimize("unroll-loops") #pragma GCC optimize("-falign-jumps") #pragma GCC optimize("-falign-loops") #pragma GCC optimize("-falign-labels") #pragma GCC optimize("-fdevirtualize") #pragma GCC optimize("-fcaller-saves") #pragma GCC optimize("-fcrossjumping") #pragma GCC optimize("-fthread-jumps") #pragma GCC optimize("-funroll-loops") #pragma GCC optimize("-fwhole-program") #pragma GCC optimize("-freorder-blocks") #pragma GCC optimize("-fschedule-insns") #pragma GCC optimize("inline-functions") #pragma GCC optimize("-ftree-tail-merge") #pragma GCC optimize("-fschedule-insns2") #pragma GCC optimize("-fstrict-aliasing") #pragma GCC optimize("-fstrict-overflow") #pragma GCC optimize("-falign-functions") #pragma GCC optimize("-fcse-skip-blocks") #pragma GCC optimize("-fcse-follow-jumps") #pragma GCC optimize("-fsched-interblock") #pragma GCC optimize("-fpartial-inlining") #pragma GCC optimize("no-stack-protector") #pragma GCC optimize("-freorder-functions") #pragma GCC optimize("-findirect-inlining") #pragma GCC optimize("-fhoist-adjacent-loads") #pragma GCC optimize("-frerun-cse-after-loop") #pragma GCC optimize("inline-small-functions") #pragma GCC optimize("-finline-small-functions") #pragma GCC optimize("-ftree-switch-conversion") #pragma GCC optimize("-foptimize-sibling-calls") #pragma GCC optimize("-fexpensive-optimizations") #pragma GCC optimize("-funsafe-loop-optimizations") #pragma GCC optimize("inline-functions-called-once") #pragma GCC optimize("-fdelete-null-pointer-checks")
STL
当我们知道容器中存放元素的大致数量时,可以通过reserve()方法减少系统对容器进行资源再分配的次数;
当我们能够确定容器中存放元素的最大数量后,可以通过reserve()修剪超额资源,减少不必要开销
https://blog.csdn.net/zvall/article/details/46357779
stl.reverse(N)
减少局部变量
尤其不要在for里面声明
map
对于map,先用map.count()检索一遍,再处理数值。例如上图。
Hash
手写unordered_map
const int SZ = 1428571; struct hash_map { struct data { int u; int v, nex; }; data e[SZ << 1]; int h[SZ], cnt; inline int hash(int u) { return u % SZ; } int& operator[](int u) { int hu = hash(u); for (int i = h[hu]; i; i = e[i].nex) if (e[i].u == u) return e[i].v; return e[++cnt] = (data){u, 0, h[hu]}, h[hu] = cnt, e[cnt].v; } int get(int u) { int hu = hash(u); for (int i = h[hu]; i; i = e[i].nex){ if (e[i].u == u) return e[i].v; } return 0; } hash_map() { cnt = 0; memset(h, 0, sizeof(h)); } }cnt; // https://ac.nowcoder.com/acm/contest/view-submission?submissionId=46873111