没输出求助(玄关)
查看原帖
没输出求助(玄关)
1199534
ycy1124楼主2024/6/2 14:48
#include<bits/stdc++.h>
using namespace std;
struct Node{
	int x,s;
	long long dp;	
}a[500001];
deque <Node> q;
int main(){
	int n,d,k;
	scanf("%d%d%d",&n,&d,&k);
	long long js=0;
	for(int i=1;i<=n;i++){
		scanf("%d%d",&a[i].x,&a[i].s);
		js+=max(a[i].s,0); 
	}
	if(js<k){
		printf("-1");
		return 0;
	}
	int l=0,r=a[n].x,mid,ans=0;
	while(l<=r){
		mid=l+r>>1;
		while(!q.empty()){
			q.pop_back();
		}
		for(int i=1;i<=n;i++){
			while(!q.empty()&&q.front().x<min(a[i].x-d-mid,1)){
				q.pop_front();
			}
			if(!q.empty()){
				a[i].dp=q.back().dp+a[i].s;
				js=max(a[i].dp,js);
			}
			while(a[i].dp>=0&&q.front().dp<=a[i].dp){
				q.pop_back();
			}
			q.push_back(a[i]);
		}
		if(ans>=k){
			r=mid-1;
			ans=mid;
		}
		else{
			l=mid+1;
			ans=mid;
		}
	}
	printf("%d",ans);
	return 0;
} 
2024/6/2 14:48
加载中...