#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 則...