懷疑是cf題,因為題目真的太優美了
首先我們需要觀察到乙個性質:棧中的元素序列一定形如 abc
abca
..
.\mathrm
abcabc
a...
的形式。
我們令新增為 2
22 貢獻,彈出為 0
00 貢獻。
假設前面出現為 abab
ab,你需要在棧中新增元素 a
aa :一定是把 b
bb 彈出。
若前面的元素是 abc
abcab
c,你需要在棧中新增元素 a
aa :一定是在棧頭新增元素 a
aa 。
我們發現,上面第二條結論成立的條件是後面不加入 b
bb 或 c
cc 了。
這意味著棧中的元素已經足夠後面的元素彈出了。因此我們得到了結論:
這樣我們就得到了序列的形態:某乙個分界點前面,我們去維護迴圈序列;某乙個分界點後面,我們不斷彈出棧中元素。列舉分界點,我們可以得到 o(n
2)
o(n^2)
o(n2
) 的演算法。
觀察都某乙個點 x
xx 是乙個合法分解點,那麼 x+1
x+1x+
1 顯然也是乙個合法的分界點。且第 x+1
x+1x+
1 個點貢獻為 2
22 ,彈出貢獻為 0
00 ,所以我們只需要二分找到合法的最小分界點就能得到最優解。
時間複雜度:o(n
logn)
o(n\log n)
o(nlogn)
.
#include
using
namespace std;
const
int n =
3e5;
int n, res =
1e9, top;
char a[n]
, st[n]
;int
check
(int x)
for(
int i=x+
1;i<=n;
++i)
return cnt;
}int
main
(void)if
(check
(l)<
1e9) cout <<
check
(l);
else cout <<
check
(r);
return0;
}
高階打字機
早苗入手了最新的高階打字機。最 自然有著與以往不同的功能,那就是它具備撤銷功能,厲害吧。請為這種高階打字機設計乙個程式,支援如下3種操作 t x 在文章末尾打下乙個小寫字母x。type操作 u x 撤銷最後的x次修改操作。undo操作 注意query操作並不算修改操作 q x 詢問當前文章中第x個字...
高階打字機
題目描述 請為一種高階打字機設計乙個程式,支援如下3種操作 2.u x 撤銷最後的x次修改操作。undo操作 注意query操作並不算修改操作 文章一開始可以視為空串。輸入描述 第1行 乙個整數n,表示運算元量。以下n行,每行乙個命令。保證輸入的命令合法。輸出描述 每行輸出乙個字母,表示query操...
高階打字機
題目描述 早苗入手了最新的高階打字機。最 自然有著與以往不同的功能,那就是它具備撤銷功能,厲害吧。請為這種高階打字機設計乙個程式,支援如下3種操作 1.t x 在文章末尾打下乙個小寫字母x。type操作 2.u x 撤銷最後的x次修改操作。undo操作 注意query操作並不算修改操作 3.q x ...