ABC471 CD 口胡题解
2026-08-16 10:04:13
发布于:浙江
C
小模拟题。但是要考虑删除,还要考虑最后一个小于 的位置和第 个大于 的位置。考虑到二分。于是我们想到一种非常方便的数据结构 set。
D
不考虑电池容量的情况下,如果一个手机充电充到了 时刻, 时刻的电量是 ,那么他在 时刻的电量是 。
因为考虑到我们要拔出电量最多的,所以我们考虑用优先队列存储。
我们存入的值是 。 时,我们弹出队首然后取队首元素 与电池最大值 中取最小值即可
#include<bits/stdc++.h>
using namespace std;
void solve(){
int q,v;cin>>q>>v;
priority_queue<int>pq;
while(q--){
int op;cin>>op;
if(op==1){
int t,w;
cin>>t>>w;
pq.push(w-t);
}
if(op==2){
int t;cin>>t;
if(pq.empty()){
cout<<-1<<endl;
}else{
cout<<min(pq.top()+t,v)<<endl;
pq.pop();
}
}
}
}
int main(){
solve();
}
全部评论 1
其实 C 可以开两个优先队列分别记录正的和负的
1周前 来自 浙江
0虽然说我两题都用的 set/multiset
1周前 来自 浙江
0哦可以这样吗
1周前 来自 浙江
0我赛时是开了两个数组记录的,但是和优先队列的做法是差不多。
1周前 来自 浙江
0


















有帮助,赞一个