联合省选 2020 冰火战士

博客介绍了如何使用二分查找和树状数组优化解决一种特定的竞赛策略问题。题目涉及在不同温度下冰火两队的能量值变化,通过维护能量值前缀和,进行单调性分析并进行两次二分查找来确定最佳温度。由于温度规模大,采用离散化策略降低时间复杂度至O(q²log²q),进一步用树状数组优化达到O(qlog²q)的时间复杂度,空间复杂度为O(q)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题面
每次注册或取消,都是在对应温度值的下标修改能量值。同时维护能量值的前缀和。每次比赛的能量值为冰火能量取最小乘二。随着温度升高,冰队的能量值不会降低,火队的能量值不会升高,具有单调性。因此考虑二分温度。
每次二分都更新答案,若冰队能量值小于火队,则将温度调大;否则将温度调小,并找出某个时能量值最高的温度。但这样二分并不能求出最佳温度。所以需要再次二分温度,此时的温度小于等于之前二分的温度或答案等于实际答案则将温度调大,否则调小。
此题温度规模过大,需要离散化,时间复杂度 O ( q 2 l o g 2 q ) O(q^2log_2q) O(q2log2q)
利用树状数组优化:https://blog.youkuaiyun.com/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,dist+ct,x)-dist;
}
struct Fenwick{
   
   
	int c[N];
	I void Add(int x,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值