CF847D题解

我的解法

对于第 ii 种狗粮,到这里的时间为 ii

所以,如果 tiit_i\le i,则刚到这盆狗粮时就可以吃了,反之,要等待 tiit_i-i 的时间。
每次选择狗粮前,要先把一定到不了的狗粮去掉,为了方便,我使用优先队列(priority_queue\text{priority\_queue})来计入吃每一盆狗粮的时间(不包含过去的时间)。

代码

#include<bits/stdc++.h>
using namespace std;
priority_queue<int>dog;
int n,T,ans;
int main(){
	scanf("%d%d",&n,&T);
	for(int i=1;i<=n;i++){
		while(!dog.empty()&&dog.top()>=T-i)
			dog.pop();
		int a;
		scanf("%d",&a);
		if(max(a,i)<T)
			dog.push(max(a-i,0));
		ans=max(ans,int(dog.size()));
	}
	return !printf("%d",ans);
}

建议自己写写,不要复制粘贴呀~

posted @ 2022-11-14 22:16  fengxiaoyi  阅读(16)  评论(0)    收藏  举报  来源