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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

[JSOI2008]火星人

發(fā)布時間:2025/5/22 javascript 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [JSOI2008]火星人 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

標簽:Splay+Hash

題解:

  首先肯定不是后綴數(shù)組,當然splay比后綴數(shù)組要簡單一些。
  求解這個問題,我們可以二分,對于兩個串A,B他們的最長公共前綴是可以二分出來的。
  那么我們對于每一個后綴,二分一下,但是需要維護這一個東西,那么我們使用splay來維護序列。按照下標為關鍵字來把初始字符串構造成一棵splay,然后維護一個Hash值代表子樹的字符串的Hash值。每次將L-1旋轉到根,再把R+1旋轉到根的右兒子,這樣就可以查詢一段區(qū)間的Hash值了。

1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #define LL long long 6 using namespace std; 7 const int MAXN=160000,mod=192608173; 8 char s[MAXN]; 9 int n,m,root,CNT; 10 int v[MAXN]; 11 int sz[MAXN],fa[MAXN],ha[MAXN],val[MAXN],ch[MAXN][2]; 12 void Update(int x) 13 { 14 int ls=ch[x][0],rs=ch[x][1]; 15 sz[x]=sz[ls]+sz[rs]+1; 16 ha[x]=ha[ls]+(LL)val[x]*v[sz[ls]]%mod+(LL)ha[rs]*v[sz[ls]+1]%mod; 17 ha[x]%=mod; 18 } 19 void Rotate(int x,int &y) 20 { 21 int old=fa[x],oldf=fa[old],op=ch[old][1]==x; 22 if(old==y) y=x; 23 else ch[oldf][ch[oldf][1]==old]=x; 24 fa[x]=oldf; 25 fa[ch[x][op^1]]=old; ch[old][op]=ch[x][op^1]; 26 fa[old]=x; ch[x][op^1]=old; 27 Update(old); Update(x); 28 } 29 void Splay(int x,int &y) 30 { 31 int old,oldf; 32 while(x!=y) 33 { 34 old=fa[x]; oldf=fa[old]; 35 if(old!=y){ 36 if((ch[old][0]==x)^(ch[oldf][0]==old)) Rotate(x,y); 37 else Rotate(old,y); 38 } 39 Rotate(x,y); 40 } 41 } 42 void Build(int &x,int ll,int rr,int FA) 43 { 44 x=++CNT; int mid=(ll+rr)/2; 45 fa[x]=FA; val[x]=s[mid]-'a'+1; 46 if(ll<mid)Build(ch[x][0],ll,mid-1,x); 47 if(rr>mid)Build(ch[x][1],mid+1,rr,x); 48 Update(x); 49 } 50 int find(int x) 51 { 52 int now=root; 53 while(1) 54 { 55 if(x<=sz[ch[now][0]]) now=ch[now][0]; 56 else 57 { 58 int tmp=sz[ch[now][0]]+1; 59 if(x<=tmp) return now; 60 x-=tmp; now=ch[now][1]; 61 } 62 } 63 } 64 int Query(int ll,int rr) 65 { 66 int x=find(ll-1),y=find(rr+1); 67 Splay(x,root); Splay(y,ch[root][1]); 68 return ha[ch[y][0]]; 69 } 70 int work(int x,int y) 71 { 72 int L=1,R=n-y,mid,res=0; 73 while(L<=R) 74 { 75 mid=(L+R)/2; 76 if(Query(x,x+mid-1)==Query(y,y+mid-1)) L=mid+1 ,res=mid; 77 else R=mid-1; 78 } 79 return res; 80 } 81 void Insert(int x,int V) 82 { 83 int y=x+1; n++; 84 x=find(x); y=find(y); 85 Splay(x,root); Splay(y,ch[root][1]); 86 CNT++; val[CNT]=V; 87 fa[CNT]=y; ch[y][0]=CNT; 88 Update(CNT); Update(y); Update(root); 89 } 90 int main() 91 { 92 scanf("%s",s+2); s[1]='a'-1; 93 n=strlen(s+1)+1; s[n]='a'-1; 94 scanf("%d",&m); v[0]=1; 95 for(int i=1;i<MAXN;i++)v[i]=(LL)v[i-1]*27%mod; 96 Build(root,1,n,0); 97 while(m--) 98 { 99 scanf("%s",s); 100 if(s[0]=='Q') 101 { 102 int x,y; scanf("%d%d",&x,&y); 103 if(x>y) swap(x,y); 104 printf("%d\n",work(x+1,y+1)); 105 } 106 else if(s[0]=='R') 107 { 108 int x; scanf("%d%s",&x,s); 109 x=find(x+1); Splay(x,root); 110 val[x]=s[0]-'a'+1; Update(x); 111 } 112 else if(s[0]=='I') 113 { 114 int x; scanf("%d%s",&x,s); 115 Insert(x+1,s[0]-'a'+1); 116 } 117 } 118 }

轉載于:https://www.cnblogs.com/D-O-Time/p/8081634.html

《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的[JSOI2008]火星人的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 一区二区三区四区av | 成人免费在线看片 | 久久精品国产免费 | 亚洲精品国产欧美 | 一区二区三区在线不卡 | 欧美成人午夜 | 美女扒开腿让男生捅 | 国产97色在线 | 日韩 | 亚洲国产精品福利 | 久久久久久久久久久网站 | 亚洲精品v | 五月天视频网 | 九九精品影院 | 都市激情 自拍偷拍 | 国产精品永久在线观看 | 小柔的裸露日记h | 国产精品亚洲五月天丁香 | 国模无码大尺度一区二区三区 | 天天爽天天 | 91精品国产91综合久久蜜臀 | 噼里啪啦国语高清 | 91最新在线视频 | 男朋友是消防员第一季 | 成年免费视频黄网站在线观看 | 日韩一道本 | 日本免费三级网站 | 一区二区在线视频免费观看 | youjizz中国少妇 | 亚洲精品视频在线播放 | 欧美多人猛交狂配 | 在线不卡日本 | 亚洲一区二区三区在线免费观看 | 高清视频在线播放 | 婷婷激情综合网 | 少妇2做爰bd在线意大利堕落 | 香蕉视频黄色在线观看 | 91日本在线 | 久久久久一级片 | 国产免费一区二区三区视频 | 狠狠撸在线视频 | 久草综合网 | 久色综| 国产黄色片在线播放 | av免费播放网站 | 国产成人精品综合在线观看 | 日韩性大片| 精品国产av 无码一区二区三区 | 亚洲快播 | www.999热| 欧美丰满艳妇bbwbbw | 影音先锋资源av | av播放网站 | 成人福利免费视频 | 国产偷人视频 | 欧美69影院 | 白石茉莉奈番号 | 久久精品美女 | 久久久久a | 精品乱码久久久久久中文字幕 | 丰满人妻一区二区三区免费视频 | 男女啪啪十八 | 欧美a级肉欲大片xxx | 亚洲美女在线播放 | 精品久久久在线观看 | 青青草网站 | 国产福利91精品一区二区三区 | 日韩在线免费观看视频 | 一级片大片 | 99这里只有精品 | free黑人多人性派对hd | 天天色天天色天天色 | 亚洲精品在线观看视频 | 国产精品久久久久久久 | 一级黄色片片 | 91精品久久人妻一区二区夜夜夜 | 午夜激情四射 | 国产乱妇无码大片在线观看 | 韩国三级视频 | 国产精品电影在线观看 | av一卡二卡 | 激情综合文学 | 日本不卡视频一区二区三区 | 伊人黄色片 | 偷看洗澡一二三区美女 | 女生扒开腿让男生操 | 日韩一区在线播放 | 色窝窝无码一区二区三区 | a√在线 | 少妇被按摩师摸高潮了 | 亚洲男性天堂 | 超碰夫妻 | 老子影院午夜精品无码 | 免费中文视频 | 五月激情在线观看 | 自宅警备员在线观看 | 国产一级做a爰片久久毛片男男 | 国产女人呻吟高潮抽搐声 | 无码一区二区三区免费 | 日韩性大片 |