【hnoi2010】弹飞绵羊

题目描述很明确,现在的目标是均摊两个操作的复杂度;

现在我们已知有两种方法:

1.每次用O(1)的时间修改K值,用O(N)的时间直接模拟回答询问;

2.每次修改了K值后用O(N)的时间更新所有答案,O(1)时间回答;

 

均摊这两种操作,可以这样做:

      由于只可以从前往后跳,所以可以把跳跃路径压缩,更新时把压缩的部分更新就可以了,实现用块状链表实现,复杂度为O(N3/2);

 

      其实块状链表只不过是水过的,正解是用splay维护一个括号序列:利用括号序列, 每次操作都是把一棵子树砍下并且接在某个结点上, 那么我们可以维护括号序列整段移动来完成这个操作. 同时为了回答询问我们需要知道每个左括号的左边有几个未匹配的左括号, Splay 可以维护这个值, 时间复杂度 O(NlogN);

      由于splay巨大的常数因子,所以很不乐观。。。

块状链表几十行,漂亮多了!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值