联合省选 2020 冰火战士

题面
每次注册或取消,都是在对应温度值的下标修改能量值。同时维护能量值的前缀和。每次比赛的能量值为冰火能量取最小乘二。随着温度升高,冰队的能量值不会降低,火队的能量值不会升高,具有单调性。因此考虑二分温度。
每次二分都更新答案,若冰队能量值小于火队,则将温度调大;否则将温度调小,并找出某个时能量值最高的温度。但这样二分并不能求出最佳温度。所以需要再次二分温度,此时的温度小于等于之前二分的温度或答案等于实际答案则将温度调大,否则调小。
此题温度规模过大,需要离散化,时间复杂度 O ( q 2 l o g 2 q ) O(q^2log_2q) O(q2log2q)
利用树状数组优化:https://blog.csdn.net/Defener/article/details/106926034
时间复杂度 O ( q l o g 2 q ) O(qlog_2q) O(qlog2q),空间复杂度 O ( q ) O(q) O(q)

#include<stdio.h>
#include<algorithm>
#define R register int
#define I inline
#define N 2000001
struct Fighter{
   
	int type,energe,temp;
}f[N];
int dist[N],ct,forw[N],firesum;
I int GetDist(int x){
   
	return std::upper_bound(dist
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值