前兩篇講述了splay模板操作,這一篇稍微介紹一下splay的實際應用
(其實只有一道題,因為本蒟蒻就寫了這乙個)
例:bzoj 1014火星人prefix
由於本蒟蒻不會字尾陣列,所以題目中給的提示完全沒看懂
不過並不影響我們做這道題,因為正解好像不用字尾陣列...
首先,如果這題沒有插入和修改,那麼我們只需二分+hash即可
(很顯然,二分相同字首的長度,用hash檢查是否合法)
可是這題有插入修改,單純hash搞不了
所以我們應用splay維護hash值即可
查詢時同樣二分
#include #include #include #include #include #include #include #include #define ls tree[rt].lson
#define rs tree[rt].rson
#define ull unsigned int
#define seed 131
#define maxn 150000
using namespace std;
struct splay
tree[150005];
ull p[150005];
int n,m;
char s[150005];
int cot=0;
int rot;
char tt[2];
void update(int rt)
void buildtree(int l,int r,int f)
tree[mid].typval=s[mid]-'a'+1;
tree[mid].fa=f;
if(lmid)
update(mid);
if(mid=v)
else
}int split(int st,int ed)
bool check(int st1,int st2,int len)
else
}void ins(int st,int ed,int v)
void change(int st,int v)
int divi(int lc,int rc,int st1,int st2)
else
}return r;
}int main()
buildtree(1,l+2,0);
cot=l+2;
rot=(l+3)>>1;
while(m--)
else if(tt[0]=='r')
else
}return 0;
}
SPLAY,LCT學習筆記(五)
這一篇重點 lct的應用 例 bzoj 2631 tree2 國家集訓隊 lct模板操作之一,利用splay可以進行區間操作這一性質對維護懶惰標記,注意標記下傳順序和如何下傳 include include include include include include include includ...
SPLAY,LCT學習筆記(六)
這應該暫時是個終結篇了.最後在這裡討論lct的乙個常用操作 維護虛子樹資訊 這也是乙個常用操作 下面我們看一下如何來維護 以下內容 對於乙個點x,如果我們對x進行access操作,那麼他的虛子樹內將包含且僅包含他原樹中子樹內除了他自己以外的所有點,這時如果我們維護了他的虛子樹資訊和,我們把這個資訊與...
SPLAY,LCT學習筆記(二)
接下來我們來填一下這個坑 回到我們的主題 noi 2005維修數列 我們剛剛討論了區間翻轉的操作方法,接下來我們來考慮區間插入和區間刪除的方法。所以當我們插入一段區間的時候,我們還是把這個區間的前驅和後繼轉上去,然後把這段區間插到左子樹就可以了 等等,怎麼插?乙個乙個往上扔?這顯然是不合理的。合理的...