這裡是一些簡單的演算法模板,沒有編譯過.(編譯過的話會做特殊說明)
目錄:1.最近公共祖先
2.cdq分治
1.最近公共祖先
namespace lcavoid dfs(int u,int fa)
if(x==y) return x;
for(int i=log-1;i>=0;--i)
if(f[i][x]!=f[i][y])
x=f[i][x],y=f[i][y];
return f[0][x];
}};
2.cdq分治(二維 lis)
//cdq分治 --- 3維lisnamespace cdq
struct nodenode[maxn],arr[maxn];
int cmpx(node a,node b)
int cmpy(node a,node b)
int equal(node a,node b)
struct bit
void update(int p,int x)
}int query(int p)
return ss;
}void del(int p)
}tree;
void solve(int l,int r)
else
}for(int i = tr;i <= r; ++i) getmax(ans[arr[i].id],tree.query(arr[i].z-1) + 1);
for(int i = l;i <= mid; ++i) tree.del(arr[i].z);
sort(arr+mid+1,arr+1+r,cmpx),solve(mid+1,r);
}; };
省選演算法匯集
陣列 鍊錶,雙向鍊錶 佇列,單調佇列,雙端佇列 棧,單調棧 堆並查集與帶權並查集 hash 表 自然溢位 雙hash 樹狀陣列 線段樹,線段樹合併 平衡樹treap 隨機平衡二叉樹 splay 伸展樹 scapegoat tree 替罪羊樹 塊狀陣列,塊狀鍊錶 5.樹套樹 線段樹套線段樹 線段樹套平...
OI省選演算法彙總
簡單列了一點 1.1 基本資料結構 1.陣列 2.鍊錶,雙向鍊錶 3.佇列,單調佇列,雙端佇列 4.棧,單調棧 1.2 中級資料結構 1.堆 2.並查集與帶權並查集 3.hash 表 自然溢位 雙hash 1.3 高階資料結構 1.樹狀陣列 2.線段樹,線段樹合併 3.平衡樹 treap 隨機平衡二...
省選 演算法總結 劃分樹
剛學了劃分樹,徹底蛋疼了。怕忘了,先總結一下 注意 本文中第k大是指從小到大排序後的第k個數,如下表 原陣列2 1 3 2 3 排序後1 2 2 3 3 k 1k 2 k 3k 4 k 5 所以可能會出現重疊的情況 類似歸併排序,把區間每次均分,選乙個基準,小於該基準的到左子樹,大於的到右子樹,然後...