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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

BZOJ1014: [JSOI2008]火星人prefix

發(fā)布時(shí)間:2023/11/30 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ1014: [JSOI2008]火星人prefix 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

BZOJ1014: [JSOI2008]火星人prefix

Description

  火星人最近研究了一種操作:求一個(gè)字串兩個(gè)后綴的公共前綴。

比方說,有這樣一個(gè)字符串:madamimadam,我們將這個(gè)字符串的各個(gè)字符予以標(biāo)號(hào):

序號(hào): 1 2 3 4 5 6 7 8 9 10 11

字符: m a d a m i m a d? a? m

現(xiàn)在,火星人定義了一個(gè)函數(shù)LCQ(x, y),表示:該字符串中第x個(gè)字符開始的字串,與該字符串中第y個(gè)字符開始的字串,兩個(gè)字串的公共前綴的長度。

比方說,LCQ(1, 7) = 5, LCQ(2, 10) = 1, LCQ(4, 7) = 0

在研究LCQ函數(shù)的過程中,火星人發(fā)現(xiàn)了這樣的一個(gè)關(guān)聯(lián):

如果把該字符串的所有后綴排好序,就可以很快地求出LCQ函數(shù)的值;同樣,如果求出了LCQ函數(shù)的值,也可以很快地將該字符串的后綴排好序。

盡管火星人聰明地找到了求取LCQ函數(shù)的快速算法,但不甘心認(rèn)輸?shù)牡厍蛉擞纸o火星人出了個(gè)難題:

在求取LCQ函數(shù)的同時(shí),還可以改變字符串本身。

具體地說,可以更改字符串中某一個(gè)字符的值,也可以在字符串中的某一個(gè)位置插入一個(gè)字符。

地球人想考驗(yàn)一下,在如此復(fù)雜的問題中,火星人是否還能夠做到很快地求取LCQ函數(shù)的值。

Input

第一行給出初始的字符串。

第二行是一個(gè)非負(fù)整數(shù)M,表示操作的個(gè)數(shù)。

接下來的M行,每行描述一個(gè)操作。

操作有3種,如下所示:
1、詢問。語法:Q x y,x,y均為正整數(shù)。功能:計(jì)算LCQ(x,y)限制:1<=x,y<=當(dāng)前字符串長度。
2、修改。語法:R x d,x是正整數(shù),d是字符。功能:將字符串中第x個(gè)數(shù)修改為字符d。限制:x不超過當(dāng)前字符串長度。
3、插入:語法:I x d,x是非負(fù)整數(shù),d是字符。功能:在字符串第x個(gè)字符之后插入字符d,如果x=0,則在字符串開頭插入。限制:x不超過當(dāng)前字符串長度

Output

對(duì)于輸入文件中每一個(gè)詢問操作,你都應(yīng)該輸出對(duì)應(yīng)的答案。一個(gè)答案一行。

Sample Input

madamimadam
7
Q 1 7
Q 4 8
Q 10 11
R 3 a
Q 1 7
I 10 a
Q 2 11

Sample Output

5
1
0
2
1

HINT

1、所有字符串自始至終都只有小寫字母構(gòu)成。

2、M<=150,000

3、字符串長度L自始至終都滿足L<=100,000

4、詢問操作的個(gè)數(shù)不超過10,000個(gè)。

對(duì)于第1,2個(gè)數(shù)據(jù),字符串長度自始至終都不超過1,000

對(duì)于第3,4,5個(gè)數(shù)據(jù),沒有插入操作。

題解Here!

這個(gè)題,難到掉牙了。。。

看到字符串處理,坑能會(huì)想到?AC自動(dòng)機(jī)/?SA?/?SAM 等等。

但是看到有插入與修改操作,?Splay?啊!

然后維護(hù)一個(gè)?hash?值:

a[rt].hash=a[lson].hash*val[a[rson].s+1]+val[a[rson].s]*(a[rt].v-'a'+1)+a[rson].hash; //lson是rt的左孩子,rson是rt的右孩子 //a[rt].v表示rt節(jié)點(diǎn)存的字母 //a[rt].s表示rt節(jié)點(diǎn)的子樹大小 //val[i]表示第i位的hash值,即27^i

剩下的就是?Splay?基本操作,具體可見BZOJ1500: [NOI2005]維修數(shù)列

附代碼:

#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #define MAXN 100010 using namespace std; int n,m; int root=0,size=1; char ch[MAXN]; unsigned val[MAXN]; struct Splay{int f,s,son[2];char v;unsigned hash; }a[MAXN]; inline int read(){int date=0,w=1;char c=0;while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}return date*w; } inline void pushup(int rt){if(!rt)return;int lson=a[rt].son[0],rson=a[rt].son[1];a[rt].s=a[lson].s+a[rson].s+1;a[rt].hash=a[lson].hash*val[a[rson].s+1]+val[a[rson].s]*(a[rt].v-'a'+1)+a[rson].hash; } inline void turn(int rt,int k){int x=a[rt].f,y=a[x].f;a[x].son[k^1]=a[rt].son[k];if(a[rt].son[k])a[a[rt].son[k]].f=x;a[rt].f=y;if(y)a[y].son[a[y].son[1]==x]=rt;a[x].f=rt;a[rt].son[k]=x;pushup(x);pushup(rt); } void splay(int rt,int ancestry){while(a[rt].f!=ancestry){int x=a[rt].f,y=a[x].f;if(y==ancestry)turn(rt,a[x].son[0]==rt);else{int k=a[y].son[0]==x?1:0;if(a[x].son[k]==rt){turn(rt,k^1);turn(rt,k);}else{turn(x,k);turn(rt,k);}}}if(ancestry==0)root=rt; } inline int newnode(char x){int rt=size++;a[rt].v=x;a[rt].hash=x-'a'+1;a[rt].s=1;a[rt].son[0]=a[rt].son[1]=0;return rt; } int buildtree(int l,int r){if(l>r)return 0;int mid=l+r>>1,lson=0,rson=0;lson=buildtree(l,mid-1);int rt=newnode(ch[mid]);rson=buildtree(mid+1,r);a[rt].son[0]=lson;a[rt].son[1]=rson;if(lson)a[lson].f=rt;if(rson)a[rson].f=rt;pushup(rt);return rt; } int kth(int rt,int k){while(1){int y=a[rt].son[0];if(k>a[y].s+1){k-=a[y].s+1;rt=a[rt].son[1];}else if(k<=a[y].s)rt=y;else return rt;} } inline int split(int l,int r){int front=kth(root,l),next=kth(root,r);splay(front,0);splay(next,front);return a[next].son[0]; } inline void change(int x,char y){int front=kth(root,x),next=kth(root,x+2);splay(front,0);splay(next,front);int u=a[next].son[0];a[u].v=y;a[u].hash=y-'a'+1;pushup(next);pushup(front); } inline void insert(int x,char y){int front=kth(root,x),next=kth(root,x+1);splay(front,0);splay(next,front);int rt=newnode(y);a[next].son[0]=rt;a[rt].f=next;pushup(next);pushup(front); } inline bool check(int x,int y,int len){int u=split(x,x+len+1),hu=a[u].hash;int v=split(y,y+len+1),hv=a[v].hash;return (hu==hv); } void work(){char f[2],y[2];int x,k;while(m--){scanf("%s",f);x=read();if(f[0]=='Q'){k=read();int l=1,r=min(size-x,size-k)-2,mid;while(l<=r){mid=l+r>>1;if(check(x,k,mid))l=mid+1;else r=mid-1;}printf("%d\n",r);}if(f[0]=='R'){scanf("%s",y);change(x,y[0]);}if(f[0]=='I'){scanf("%s",y);insert(x+1,y[0]);}} } void init(){scanf("%s",ch+1);n=strlen(ch+1);val[0]=1;for(int i=1;i<=MAXN-5;i++)val[i]=val[i-1]*27;root=buildtree(0,n+1);m=read(); } int main(){init();work();return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/Yangrui-Blog/p/9343817.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

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

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

主站蜘蛛池模板: 国产中文欧美日韩在线 | 午夜av影视 | 99ri国产精品 | 麻豆视频在线 | 日本美女视频一区 | av自拍偷拍| www.青青操| 久久久久久艹 | brazzers精品成人一区 | 国产精品区一区二区三 | 亚洲女同一区二区 | 波多野结衣中文一区 | 色偷偷av | jizz在线免费观看 | 丁香花完整视频在线观看 | 纯爱无遮挡h肉动漫在线播放 | 国产超碰 | 啪啪在线观看 | 青青草视频成人 | 青娱乐欧美 | 亚洲欧美一区二区三区情侣bbw | 嫩模被强到高潮呻吟不断 | 上床视频在线观看 | 黄色三级网站在线观看 | 精品福利在线观看 | 无码人妻精品中文字幕 | 蜜臀av免费在线观看 | 免费在线观看污 | 国产精品第五页 | 日本午夜三级 | 妻子的性幻想 | 一二三区免费 | 在线手机av | 国产一区二区三区久久久 | 亚洲人人精品 | 免费69视频| av青草| 乳色吐息在线看 | 伊人久久一区二区 | a视频免费看 | 欧美性天天 | 少妇视频网 | 国产成人久久精品麻豆二区 | 日本午夜电影网站 | 射进来av影视网 | 人妻饥渴偷公乱中文字幕 | 伊人久久成人网 | 三级黄色片网站 | 亚洲午夜在线 | 日韩一级免费观看 | 狠狠干2020| 秋霞成人午夜鲁丝一区二区三区 | 久久在现| 男人天堂av网站 | 99久久国产宗和精品1上映 | 国产精品久久久久久人 | 国产精品中文在线 | 欧美日韩网站 | 91综合在线| 狠狠躁日日躁夜夜躁2022麻豆 | 国产一区久久久 | 污视频免费在线 | 懂色av一区二区三区在线播放 | 操比视频网站 | 97久久超碰| 国产人妻黑人一区二区三区 | 国模吧一区二区三区 | 日本三级一区 | 午夜男人影院 | 精品成人av | 久久免费视频2 | 亚洲www久久久 | 欧美 日韩 国产 精品 | 久草这里只有精品 | 久艹av | 日本大尺度吃奶做爰久久久绯色 | 欧洲成人综合网 | 亚欧美视频| 天天天天色 | www.在线| 99久久久久成人国产免费 | 伊人av综合| a级淫片| 欧美性xxxx图片 | 理论片在线观看理伦片 | 在线视频精品一区 | 久久久久久久久久99 | 亚洲爆乳无码精品aaa片蜜桃 | 国产乱色精品成人免费视频 | 四虎福利视频 | 波多野结衣在线免费观看视频 | 女女同性被吸乳羞羞 | 日韩高清在线观看 | 国产精品视频久久久久 | 日本不卡一二三 | 在线观视频免费观看 | 欧美黄色a级大片 | 麻豆偷拍 | 欧美日韩午夜精品 |