.h结尾的、删命名空间、用typedef(这个应该不用说了;vector<int>g[N];改为int g[N][N],gtot[N];。for(int v:g[u])或for(it v=g[u].bg(); ...)改为for(int i=1;i<=gtot[u];++i) {v=g[u][i]; ...}。g[u].pb(v)改为g[u][++gtot[u]]=v。build(int u=1,int l=1,int r=n)就不行。void(w[u]=_w)之类的不能用。另外,
const int N=10003;
ll c[N];
应改为
#defing N 10003
ll c[N];
"%I32d",Linux 是"%d",本地调试可以定义
#ifdef __linux__
#define fmt "%d"
#else
#define fmt "%I32d"
#endif
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
这时如果调用max(query(l,r,...),query(l,r,...))将导致其中一个query被调用两次。#pragma GCC optimize("Ofast")开优化。