import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) {
new Task().solve();
}
}
class Task {
InputReader in = new InputReader(System.in);
PrintWriter out = new PrintWriter(System.out);
void solve() {
n = in.nextInt();
stops = new Stop[n+1] ;
for (int i = 0 ; i < n ; i++) {
stops[i] = new Stop(in.nextLong() , in.nextLong()) ;
}
stops[n] = new Stop(in.nextLong() , 0L) ;
lef = in.nextLong();
for(int i = 0 ; i < n ; i++)
stops[i].distance = stops[n].distance - stops[i].distance ;
out.print(doWork());
out.flush();
}
int n;
long lef;
PriorityQueue<Long> q;
Stop[] stops ;
int doWork() {
q = new PriorityQueue<Long>(n , Collections.reverseOrder());
Arrays.sort(stops) ;
int sum = 0;
long pos = 0;
for (int i = 0; i <= n; i++) {
long diff = stops[i].distance - pos;
while (lef < diff) {
if (q.isEmpty())
return -1;
sum++;
lef += q.poll();
}
pos = stops[i].distance ;
lef -= diff;
q.offer(stops[i].val);
}
return sum;
}
class Stop implements Comparable<Stop>{
long distance ;
long val ;
@Override
public int compareTo(Stop o) {
return this.distance == o.distance ? 0 :
this.distance < o.distance ? -1 : 1 ;
}
Stop(long distance , long val) {
this.distance = distance ;
this.val = val ;
}
}
}
class InputReader {
public BufferedReader reader;
public StringTokenizer tokenizer;
public InputReader(InputStream stream) {
reader = new BufferedReader(new InputStreamReader(stream), 32768);
tokenizer = new StringTokenizer("");
}
private void eat(String s) {
tokenizer = new StringTokenizer(s);
}
public String nextLine() {
try {
return reader.readLine();
} catch (Exception e) {
return null;
}
}
public boolean hasNext() {
while (!tokenizer.hasMoreTokens()) {
String s = nextLine();
if (s == null)
return false;
eat(s);
}
return true;
}
public String next() {
hasNext();
return tokenizer.nextToken();
}
public int nextInt() {
return Integer.parseInt(next());
}
public long nextLong() {
return Long.parseLong(next());
}
public double nextDouble() {
return Double.parseDouble(next());
}
public BigInteger nextBigInteger() {
return new BigInteger(next());
}
}
POJ2431 贪心
最新推荐文章于 2022-12-03 20:15:15 发布