好题flag--(5.31)

codeforce round #278(div 1) B

给定N个数,让你尽可能少的分成ans个区间。(1).使得每个区间满足至少包含L个数,(2).且区间内的最大值与最小值之差最大为S

思路:

dp。记录dp[i]为以i结尾的序列最小能分的区间数,我们可以往左找到最小的j使得区间满足条件2,这个我们可以用二分查找的方法。接着我们知道了可选的区间为[j,i-L],即选一个最小的值去更新dp[i]=dp[k]+1,这个就需要继续优化了,用线段树什么的都行。。。

codeforce round #305(div 1) B

给定N个数,求区间长度分别为1…..N时候,这些等长区间内的最小值的最大值。

思路:

单调栈。利用单调栈得到每个数作为最小值向左与向右能延伸到的地方L[i],R[i]。然后就可以维护处长度为R[i]-L[i]+1的区间的最小值的最大值,又因为长度越大,对应的答案是递减的,所以最后更新一下: ans[i]=max(ans[i],ans[i+1]).

HDU 5249 KPI

给定一些操作,会有增加或删除数的操作,问你当前时刻所有的数里面的中位数是多少?

思路:

只会个树状数组求第K大,通过其他的数据结构都能比较优雅的解决这个问题。
本题采用离线处理的方式,对于所有的数离散化一下,然后无论是进来或出去一个数都可以去找到对应的数的下标在树状数组中进行update,当遇到询问是时,求第K大就是二分的去找对应的下标就行了!其他求第K大做法,可以自行搜索!

HDU 5255 魔法因子(待补)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值