HHHOJ 可持久化的書櫥

2021-08-21 04:19:44 字數 999 閱讀 9730

題目

暫無版權

題解

這道題是一道離線dfs。

對於 4 x 操作,我們可以認為第 x 次操作做完後直接跳到了當前這次操作,用一條從 x 指向當前的邊。

這樣一來,若下一次操作為 4 x 操作,那麼肯定在第 x 次操作做完後就跳過去做掉了,所以不用管了。否則就繼續下乙個操作。

如果有多個操作從 x 開始怎麼辦?很明顯,每個操作做完我們都回溯一下就好了。4 x 操作的回溯不用管,其它三個很好弄。

每次的答案先用 answer 陣列記住,然後最後按順序輸出。

**

#include

#include

#include

#include

using namespace std;

const int maxn=2e3+5,maxq=3e5+5;

int n,m,q,tot,ans,sum[maxn],vis[maxn],mp[maxn][maxn],lnk[maxq],son[maxq],nxt[maxq],answer[maxq];

struct jsa[maxq];

int read()

while (ch>='0'&&ch<='9') ret=ret*10+ch-'0',ch=getchar();

return ret*f;

}void add(int x,int y)

void dfs(int i)

answer[i]=ans;

for (int j=lnk[i];j;j=nxt[j]) dfs(son[j]);

switch (a[i].id)

}int main()

dfs(0);

for (int i=1;i<=q;i++) printf("%d\n",answer[i]);

return

0;}

可持久化專題(二) 可持久化陣列的實現

前言 呃,首先宣告,看這篇部落格前,最好先去學一學主席樹,畢竟可持久化陣列的實現是完全基於主席樹的 那些亂七八糟的玄學演算法請走開 l in klink link 主席樹詳見部落格可持久化專題 一 主席樹 可持久化線段樹 順便吐槽一句,可持久化陣列這個名字聽起來真的很智障。簡介 可持久化陣列支援單點...

可持久化Treap

本來是想寫一點題的,但是hfu最近讓我改鍵盤指法,原來都是亂打 手速蠻快就是錯的多 剛開始練手法真的煩躁,像我這種從來不用小指頭的 就寫個學習筆記吧.非教程向,只是懂了後寫點隨筆,練成指法說不定能來填坑.可持久化treap首先是基於非旋轉式treap的,如果要旋轉的話那麼就會破壞父子關係導致無法可持...

可持久化Treap

可持久化treap本質上市乙個二叉平衡樹,若不對其規則進行修改,中序遍歷後得出的序列是遞增的。void maintain o 計算結點o的size int lowcount key 比key所在位置小1 int uppercount key key所在的位置,如果有多個相同的key,選位置最大的 i...