POJ:2431 P76
#include <stdio.h>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=10000005;
int main() {
int L,P,N;
int A[N];
int B[N];
scanf("%d",&N);
for(int i=N-1;i>=0;i--)
scanf("%d %d",&A[i],&B[i]);
scanf("%d %d",&L,&P);
for(int i=0;i<N-1;i++)
A[i]=L-A[i];
// 把终点也认为是加油站
A[N]=L;
B[N]=0;
N++;
priority_queue<int> que;
int ans =0,pos=0,tank=P;
for(int i=0;i<N;i++){
int d=A[i]-pos;
while (tank-d<0){
if(que.empty()){
puts("-1");
return 0;
}
tank+=que.top();
que.pop();
ans++;
}
tank-=d;
pos=A[i];
que.push(B[i]);
}
printf("%d\n",ans);
return 0;
}
実行中の間違いました