日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【bzoj5084】hashit 广义后缀自动机+树链的并+STL-set

發布時間:2025/7/25 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【bzoj5084】hashit 广义后缀自动机+树链的并+STL-set 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

你有一個字符串S,一開始為空串,要求支持兩種操作 在S后面加入字母C 刪除S最后一個字母 問每次操作后S有多少個兩兩不同的連續子串

輸入

一行一個字符串Q,表示對S的操作 如果第i個字母是小寫字母c,表示第一種加字母c的操作 如果為-表示刪除操作,保證所有刪除操作前S都非空 |Q|<=10^5

輸出

輸出|Q|行,第i行表示i個操作之后S內有多少個不同子串

樣例輸入

aba-caba

樣例輸出

1
3
5?
3?
6?
9
12
17


題解

廣義后綴自動機+樹鏈的并+STL-set

題目給出的字符串是一棵Trie的形式,我們對其建出廣義后綴自動機。

那么每次我們要求的就是:Trie樹上當前所有點在后綴自動機pre樹到根節點的路徑所覆蓋的所有點的 $dis[pre[i]]-dis[i]$ 之和,即樹鏈的并的長度。

我們使用STL-set維護動態插入刪除節點的樹鏈的并即可。

時間復雜度 $O(26n+n\log n)$ 。

第一次寫正常的廣義SAM = =

#include <set> #include <cstdio> #include <cstring> #include <algorithm> #define N 200010 using namespace std; set<int> s; set<int>::iterator it; char str[N]; int tc[N][26] , tf[N] , tt = 1 , pos[N] , c[N][26] , pre[N] , dis[N] , tot = 1 , head[N] , to[N] , next[N] , cnt , fa[N][20] , deep[N] , log[N] , vp[N] , rp[N] , tp; inline int insert(int x , int p) {if(c[p][x]){int q = c[p][x];if(dis[q] == dis[p] + 1) return q;else{int nq = ++tot;memcpy(c[nq] , c[q] , sizeof(c[q]));dis[nq] = dis[p] + 1 , pre[nq] = pre[q] , pre[q] = nq;while(p && c[p][x] == q) c[p][x] = nq , p = pre[p];return nq;}}else{int np = ++tot;dis[np] = dis[p] + 1;while(p && !c[p][x]) c[p][x] = np , p = pre[p];if(!p) pre[np] = 1;else{int q = c[p][x];if(dis[q] == dis[p] + 1) pre[np] = q;else{int nq = ++tot;memcpy(c[nq] , c[q] , sizeof(c[q]));dis[nq] = dis[p] + 1 , pre[nq] = pre[q] , pre[np] = pre[q] = nq;while(p && c[p][x] == q) c[p][x] = nq , p = pre[p];}}return np;} } void build(int x) {int i;for(i = 0 ; i < 26 ; i ++ )if(tc[x][i])pos[tc[x][i]] = insert(i , pos[x]) , build(tc[x][i]); } inline void add(int x , int y) {to[++cnt] = y , next[cnt] = head[x] , head[x] = cnt; } void dfs(int x) {int i;vp[x] = ++tp , rp[tp] = x;for(i = 1 ; i <= log[deep[x]] ; i ++ ) fa[x][i] = fa[fa[x][i - 1]][i - 1];for(i = head[x] ; i ; i = next[i]) fa[to[i]][0] = x , deep[to[i]] = deep[x] + 1 , dfs(to[i]); } inline int lca(int x , int y) {int i;if(deep[x] < deep[y]) swap(x , y);for(i = log[deep[x] - deep[y]] ; ~i ; i -- )if(deep[x] - deep[y] >= (1 << i))x = fa[x][i];if(x == y) return x;for(i = log[deep[x]] ; ~i ; i -- )if(deep[x] >= (1 << i) && fa[x][i] != fa[y][i])x = fa[x][i] , y = fa[y][i];return fa[x][0]; } int main() {int q , i , now = 1 , x , y;long long ans = 0;scanf("%s" , str) , q = strlen(str);for(i = 0 ; i < q ; i ++ ){if(str[i] == '-') now = tf[now];else{if(!tc[now][str[i] - 'a']) tc[now][str[i] - 'a'] = ++tt , tf[tt] = now;now = tc[now][str[i] - 'a'];}}pos[1] = 1 , build(1);for(i = 2 ; i <= tot ; i ++ ) add(pre[i] , i) , log[i] = log[i >> 1] + 1;dfs(1);now = 1;for(i = 0 ; i < q ; i ++ ){if(str[i] == '-'){ans -= dis[pos[now]] , s.erase(vp[pos[now]]);x = y = 0 , it = s.upper_bound(vp[pos[now]]);if(it != s.end()) x = rp[*it];if(it != s.begin()) y = rp[*--it];if(x) ans += dis[lca(pos[now] , x)];if(y) ans += dis[lca(pos[now] , y)];if(x && y) ans -= dis[lca(x , y)];now = tf[now];}else{now = tc[now][str[i] - 'a'] , ans += dis[pos[now]];x = y = 0 , it = s.upper_bound(vp[pos[now]]);if(it != s.end()) x = rp[*it];if(it != s.begin()) y = rp[*--it];if(x) ans -= dis[lca(pos[now] , x)];if(y) ans -= dis[lca(pos[now] , y)];if(x && y) ans += dis[lca(x , y)];s.insert(vp[pos[now]]);}printf("%lld\n" , ans);}return 0; }

?

?

轉載于:https://www.cnblogs.com/GXZlegend/p/8711038.html

總結

以上是生活随笔為你收集整理的【bzoj5084】hashit 广义后缀自动机+树链的并+STL-set的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 丁香花在线影院观看在线播放 | 茄子视频懂你更多在线观看 | 小视频免费在线观看 | 亚洲日本中文字幕 | 男女激情实录 | 三级中文字幕 | 99精品视频免费在线观看 | 污视频网站免费在线观看 | 免费黄色在线网址 | 清纯唯美亚洲色图 | www.88av| 成人激情片 | 懂色av一区二区三区蜜臀 | 国模大尺度视频 | 在线免费观看h片 | 国产精品黄色网 | 国产尤物av | 天堂av亚洲 | 黄色片成人| 五月天国产 | 午夜视频免费看 | 鲁鲁狠狠狠7777一区二区 | 亚洲欧美日本一区二区 | 欧美日韩一区二区区别是什么 | 日韩视频一二三 | 91高清无打码 | 8050午夜一级毛片久久亚洲欧 | 久久午夜激情 | 图书馆的女友在线观看 | 六月色婷 | 国产黄频 | 一区二区成人网 | 亚洲欧美自拍视频 | 操日本老妇| 欧美一区二区三区久久成人精品 | 希岛婚前侵犯中文字幕在线 | 97视频精品 | 小sao货水好多真紧h无码视频 | 日韩深夜在线 | 老子影院午夜精品无码 | 亚洲视频一二区 | いいなり北条麻妃av101 | av网站在线播放 | 亚洲一区免费在线观看 | 四级毛片| 五月天av网 | 亚洲天堂av电影 | 黄色三级在线视频 | www日本色 | 狠狠人妻久久久久久综合麻豆 | 91黄色看片| 国产成年无码久久久久毛片 | 毛片网页 | 欧美日韩成人免费 | 国产一区二区视频在线 | 国产一区二区在线免费 | 老司机深夜福利影院 | 一卡二卡三卡在线 | 久久伊人成人 | 国产美女无遮挡永久免费观看 | 免费看黄色a级片 | 国产香蕉在线 | 免费a级 | 少妇在线观看 | 久久久久久久久久99精品 | 国产精品一区二区人妻喷水 | 自拍三级视频 | av成人在线免费观看 | 黄色的一级片 | 中国女人内谢69xxxx | 中出精品 | 日日噜噜夜夜狠狠久久丁香五月 | 婷婷爱爱 | 成人亚洲玉足脚交系列 | 国产精品入口66mio男同 | 久久激情婷婷 | 亚洲视频第一页 | 猎艳山村丰满少妇 | 亚洲婷婷在线视频 | 在线观看免费中文字幕 | 91九色蝌蚪porny | www.在线观看av | 国产一级片在线 | 国产毛片一区 | 第一页国产 | 麻豆精品在线视频 | 久久黄色大片 | 日日撸夜夜操 | 岛国一区 | 黄色高清免费 | 午夜不卡福利视频 | 欧美成人aaaa | 激情国产在线 | 国产成人精品二区三区亚瑟 | 黄色午夜网站 | 天天综合中文字幕 | 日韩精品福利 | 亚洲深爱 | 美女被揉胸视频 |