[jsoi2011]括号序列

这题狠狠地坑了一爹啊。我优化半天递归非递归,自顶向下,自下向上的splay都写了一遍测试,结果最快的还是递归和自顶向下的。

 

,还是一直TLE。然后测了一下C++标程。比我的弱PASCAL还慢。

交上bzoj一测。C++AC。我的TLE。。

Q_Qpascal木有O2开关啊

 

 

言归正传。。这题看到reverse操作自然而然想到splay。。然后就是如何维护输出值

我们对于一个括号序列

我们可以把左括号当做1.右括号当做-1。遇到一个右括号找到前面的左括号都删去= =

我们可以知道。。最后一定是

))))((((((这种形式的。

那么我们找到没得匹配的右括号最多的。。。

 

那这个做例子 ((()(()))))))(((((()(

 

 ((()(()))))))(((((()(

加粗表示匹配的括号。

那么我们维护一个前缀和 。。找到从左到右最小的和(未匹配的右括号最多)x。从右到左最大的(未匹配左括号最多)y

 

)))  |   ((((((

一个括号序列分成一堆右括号和左括号。

那么修改的最小值就是(abs(x)+1)/2 + (y+1)/2

 

 

 

一下的我弱p代码- -懒得改成C去A这题了。= =

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值