预编译

#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

  1. 当我们知道容器中存放元素的大致数量时,可以通过reserve()方法减少系统对容器进行资源再分配的次数;

  2. 当我们能够确定容器中存放元素的最大数量后,可以通过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