最長上公升子串行(模板)

2021-09-27 16:40:05 字數 1237 閱讀 5110

#include

#include

#include

#include

using namespace std;

int n, q;

int stack[

100100];

char s[

100100];

intdp

(int start)

else

else

} stack[low]

= s[i];}

}return top;

}int

main()

return0;

}

時間限制: 1 sec 記憶體限制: 128 mb

題目描述

給定乙個長度為n的字串s(只包含小寫字母),給出q次查詢,對於每次查詢x,求出以s[x](下標從0開始)為起始的最長上公升子串行的長度(嚴格增)。

輸入第一行兩個整數n,q(1<=n,q<=1e5),意義見題目描述。

第二行乙個長度為n的字串s。

第三行q個整數x(0<=x輸出

輸出q個數(以空格分割,行末有空格),表示以s[x]為起始的最長上公升子串行的長度。

樣例輸入

10 3

abbaaccbbd

2 5 8

樣例輸出

3 2 2

注意對於多次詢問的情況,需要修改一下

#include

#include

#include

using namespace std;

const

int n =

100005

;int query[n]

, ans[n]

;int

binarysearch

(char a,

int left,

int right,

int x)

else

}return mid -1;

}int

main()

int len =0;

int t;

for(

int i =

0; i < n; i++

)else

}for

(int i =

0; i < q; i++

)return0;

}

最長上公升子串行模板

1 動態規劃法 include define max 1000 int seq max 10 int seqlen max 10 int main seqlen i max 1 if seqlen i maxlen seqlen中儲存的是第i個數為終點的最長上公升序列,找出這個陣列中最大的值即為最優...

最長上公升子串行(DP 模板)

有兩個不可描述的線段,每個上面有 n 個介面,現在給定了乙個連線,求如果減去一些連線的話,最大的不交叉連線個數是多少。省賽選拔賽的題,英文題面太長直接沒看。理解題意後挺簡單的,只要找到規律。要求最大的不交叉,可以找到乙個規律,就是求不遞減子串行,不過這裡用 o n 2 的會超時,所以用了乙個 o n...

最長上公升子串行LIS模板

有兩種演算法複雜度為 o n logn 和 o n 2 o n 2 演算法分析如下 a 1 a n 存的都是輸入的數 1 對於a n 來說.由於它是最後乙個數,所以當從a n 開始查詢時,只存在長度為1的上公升子串行 2 若從a n 1 開始查詢.則存在下面的兩種可能性 1 若a n 1 a n 則...