NOIP2015PJ T3,T4题解

NOIP2015 PJ T3,T4 solution

By—Jim·H

sum……………………………………………………………2

salesman……………………………………………………3

 

 

 

 

 

 

 

 

 

 

Sum

40%

且color[z]=color[x],x与z的奇偶性相同

复杂度O(N2

70%

表示不知道这个部分分有什么用

100%

考虑优化

对于每个x,z我们可拆解一下公式

x*num[x]+z*num[z]+x*num[z]+z*num[x]

对于每个z,我们可以边做边累加与他合法的前缀和,再加上就好了。

复杂度O(N)

 

 

 

 

Salesman

我们可以考虑贪心

因为我们走路所需要的疲劳值,就是走到最右边那户人的疲劳值,左边所有的对他都没有影响。

我们设最右边的为last

显然这个last把整条街分成了左右两部分,一部分是走路疲劳值没有影响的,一部分是有影响的。

可以看出,随着X的增大,最优的last一定是单调不减的。

因为他这个last是我们综合两边最优的值选出来的,选别的一定没有他优。

如果有多个相同的值,我们完全可以贪心的选择最左边的那一个。因为他对以后答案的影响最小(其实都一样),也保持了last的单调不减性

我们可以用两个堆分别维护最大值,每做一个X,看看新取的这个在左边还是在右边,如果在左边就把ans加上,再把他总左边堆里删除。如果在右边,就加入答案,并且把last修改为这个数。此时,我们使得从旧last+1到新last-1这部分变成了走路疲劳值没有影响的,所以我们可以把其中每个数都从右边的堆删除,加入左边的堆就好了。

堆的复杂度是log N的,然后枚举X是N,然后所有的改变last中的操作全部加起来是N,复杂度就是O(2N log N)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值