性感代码求调
查看原帖
性感代码求调
1032219
UNAFO楼主2024/7/17 20:52
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,d,k;
int x[500005],s[500005];
int dp[500005];
deque<int> q;
bool check(int g){
	memset(dp,0xcf,sizeof(dp));
	dp[0]=0;
	q.clear();
	int l=max((long long)1,d-g);
	int r=d+g;
	int k=0;
	for(int i=1;i<=n;i++){
		while(x[k]+l<=x[i]) {
			if(dp[k]!=0xcfcfcfcfcfcfcfcf){
				while(!q.empty() && dp[q.back()]<=dp[k]) q.pop_back();
				q.push_back(k);
			}
			k++;
		}
		while(!q.empty() && x[q.front()]+r<x[i]) q.pop_front();
		if(!q.empty()) dp[i]=dp[q.front()]+s[i];
		if(dp[i]>=k) return true;
	}
	return false;
}
signed main(){
	cin>>n>>d>>k;
	for(int i=1;i<=n;i++){
		cin>>x[i]>>s[i];
	}
	int l=0,r=x[n];
	while(l+1<r){
		int mid=(l+r)/2;
		if(check(mid)) r=mid;
		else l=mid;
	}
	cout<<l;
	return 0;
}

全WA

2024/7/17 20:52
加载中...