二進位制分組擴充套件

2022-09-24 05:12:10 字數 1193 閱讀 4449

最近才發現的乙個套路,以前以為二進位制分組只能搞揹包,結果發現還有一些更為優秀的操作。

我們對於乙個不支援動態操作的資料結構,拆分為 \(log\) 個,然後每次加入元素加入到乙個新的組中,如果最新的兩個資料結構元素個數相等,就合併兩個元素。然後暴力重構這個合併得到的資料結構。

然後查詢的時候就查詢每乙個分組內的答案,之後答案合併即可。

我們可以證明,這樣的操作的複雜度是 \(o(qlogq)\) ,q是操作個數。

相當於積累乙個技巧。

例題 cf710

這個題我們就考慮二進位制分組ac自動機。然後就可以支援動態插入。之後我們對於被刪除的字串開乙個ac自動機的二進位制分組。查詢的時候答案就是原二進位制分組的答案減去被刪除的字串的二進位制分組的答案。

#include#define ll long long

#define db double

#define filein(a) freopen(#a".in","r",stdin)

#define fileot(a) freopen(#a".out","w",stdout)

#define sky fflush(stdout)

templateinline void read(t &s)

} inline void clear()

inline void ins(std::string s)

inline void build()

} while(!q.empty() )

val[u]+=val[fail[u] ];

} }inline int query(std::string s)

a[top1].clear();

--top1;

} a[top1].build();

}inline void del(std::string s)

b[top2].clear();

--top2;

} b[top2].build();

}inline int query(std::string s)

for(int i=1;i<=top2;++i)

return res;

}int q;

std::string c;

int main()else if(op==2)else

} return 0;

}

擴充套件二進位制數

1.題目描述 傳送門2.code c 版本 include using namespace std int dp 64 3 2 int num 64 int n int dfs int i,int j,int k if dp i j k 0 else if 2 k num i 1 1 1 2 k n...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...

學習筆記 二進位制分組

ac自動機 二進位制分組。利用二進位制分組思想,維護乙個 siz 從大到小的單調棧,若 siz siz 就一直暴力合併兩個 ac 自動機並求出新 ac 自動機的 fail 指標。code below include using namespace std const int maxn 300000 ...