描述 description
最近,jzyz的科學家忽然發現了一種神秘的生物出現在了霞棲湖中,通過提取dna,科學家發現這個生物的dna由a.....z共26種鹼基對組成,而且這個生物常常容易發生dn**段的缺失。那麼問題來了。科學家想知道dn**段的缺失對這個生物會產生什麼影響。
給你一段長為n的dna序列(保證全為小寫字母),請求出從x到y-1的片段缺失後,忽略前x-1的長度,他們最長還有多長連續序列是相同的?
輸入格式 input format
第一行為n,表示dna序列的長度
接下來一行為dna序列
接下來一行為m,表示m次詢問。
接下來的m行為x,y,表示x到y(或y到x)的片段缺失
輸出格式 output format
對於m次詢問,輸出m行,每行兩個數
樣例輸入 sample input
10aaaaaabaaa
54 7
6 56 5
9 85 10
樣例輸出 sample output 01
121/*樣例解釋
對於第乙個詢問
從第4個鹼基到第6個鹼基缺失
故缺失後由
aaaaaabaaa -> aaabaaa
因為rrna是連續讀取的,所以兩個dna的相同的片段是aaa
但是由於我們忽略前三個鹼基對,所以相同的長度為0.
對於第二個詢問
第五個鹼基對缺失
故缺失後由
aaaaaabaaa -> aaaaabaaa
相同片段是5,但是忽略前四個,所以相同為1
注釋 hint
100% 3<=n<=300000 10<=m,x,y<=30000
本質上就是求最長公共字首。
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8view code#define maxn 3001000
9#define inf 0x3f3f3f3f
10using
namespace
std;
11int n,x,y,rank[maxn],sa[maxn],p[maxn],cnt[maxn],tmp[maxn],height[maxn],t[maxn*4+500
];12
char
s[maxn];
13 inline int
read()
1417
while(isdigit(ch))
18return x*f;19}
20bool equ(int x,int y,int l)
21void
doubling()
2237}38
void
get_height()
3943
if(j) j--;
44while(s[i+j]==s[k+j]) j++;
45 height[rank[i]]=j;46}
47}48void build(int p,int l,int
r)49
51int mid=(l+r)/2
;52 build(p*2
,l,mid);
53 build(p*2+1,mid+1
,r);
54 t[p]=min(t[p*2],t[p*2+1
]);55}56
int getnum(int p,int l,int
r)57
64void
ask()
6571
if(rank[tx]1,y=rank[ty];
72else x=rank[ty]+1,y=rank[tx];
73 printf("
%d\n
",getnum(1,1
,n));74}
75}76int
main()
77
雙基因突變患者 警惕,這些基因突變,癌症術後易復發
手術是徹底 肺癌最主要的手段之一,但是為何一些臨床i期的肺癌手術切除的時候還是會出現 肺癌是我國發病率最高的惡性腫瘤,不過得益於大家關注度的提公升,一些肺癌高危人群使用低劑量螺旋ct來篩查早期肺癌,一些臨床i期肺癌可以被發現並使用手術的方式切除。如果說手術將所有的肺部腫瘤細胞都切除乾淨了,那麼肺癌就...
雙基因突變患者 我的肺癌沒有基因突變,這是好是壞
我的肺癌沒有基因突變,這是好是壞?問題的答案顯然不會是 好 還是 壞 這麼簡單。我們當然知道大多數患者在迫切想知道答案的同時,卻沒有額外的精力去學習癌症診治的知識。但是,用 好 和 壞 這種非黑即白的方式理解世界總會遇到瓶頸。所以,在真正回答問題之前用基本事實構建乙個簡單的邏輯 事實1腫瘤是體內細胞...
JZOJ 4876 基因突變
的707剛剛從白堊紀穿越回來,心中產生了乙個念頭 我要統治人類!但是統治人類是很龐大且複雜的乙個工程,707嘗試了 催眠,以及武裝鎮壓都沒能成功地統治人類,於是她決定從科學上對人類的基因進行研究從而達到他的目的。707獲取了人類的基因資訊並嘗試對基因進行實驗。他發現可以把人類的基因看做乙個只包含小寫...