好题flag--(5.31)

来源:互联网 发布:日本旅游导航软件 编辑:程序博客网 时间:2024/05/16 05:02

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
原创粉丝点击