# [BZOJ1664] [Usaco2006 Open]County Fair Events 参加节日庆祝

## [Usaco2006 Open]County Fair Events 参加节日庆祝

### Description

Farmer John has returned to the County Fair so he can attend the special events (concerts, rodeos, cooking shows, etc.). He wants to attend as many of the N (1 <= N <= 10,000) special events as he possibly can. He’s rented a bicycle so he can speed from one event to the next in absolutely no time at all (0 time units to go from one event to the next!). Given a list of the events that FJ might wish to attend, with their start times (1 <= T <= 100,000) and their durations (1 <= L <= 100,000), determine the maximum number of events that FJ can attend. FJ never leaves an event early.

### Input

• Line 1: A single integer, N.

• Lines 2..N+1: Each line contains two space-separated integers, T and L, that describe an event that FJ might attend.

### Output

• Line 1: A single integer that is the maximum number of events FJ can attend.

7

1 6

8 6

14 5

19 2

1 8

18 3

10 6

4

### OUTPUT DETAILS:

FJ can do no better than to attend events 1, 2, 3, and 4.

Silver

## 题解

var
a:array[0..10000,1..2]of longint;
i,j,k:longint;
n,b,ans:longint;
procedure sort(l,r: longint);
var i,j,x,y: longint;
begin
i:=l; j:=r; x:=a[(l+r) div 2,2];
repeat
while a[i,2]<x do inc(i);
while x<a[j,2] do dec(j);
if not(i>j) then
begin
y:=a[i,2]; a[i,2]:=a[j,2]; a[j,2]:=y;
y:=a[i,1]; a[i,1]:=a[j,1]; a[j,1]:=y;
inc(i); dec(j);
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end;

begin
for i:=1 to n do
begin
a[i,2]:=b+a[i,1];
end;
sort(1,n); ans:=0; b:=0;
for i:=1 to n do
if b<=a[i,1]
then begin inc(ans); b:=a[i,2]; end;
writeln(ans);
end.
05-04 21

05-07 354
12-18 94
06-13 1414