USACO2010Oct-Soda Machine

 

usaco2010 Oct-Soda Machine

Time Limit: 3 Sec  Memory Limit: 128 MB

Description

 

To meet the ever-growing demands of his N (1 <= N <= 50,000) cows,Farmer John has bought them a new soda machine. He wants to figure out the perfect place to install the machine. 
 

The field in which the cows graze can be represented as a one-dimensional number line. Cow i grazes in the range A_i..B_i (1 <= A_i <= B_i; A_i <= B_i <= 1,000,000,000) (a range that includes its endpoints), and FJ can place the soda machine at any integer point in the range 1..1000000000. Since cows are extremely lazy and try to move as little as possible, each cow would like to have the soda machine installed within her grazing range. 
 

Sadly, it is not always possible to satisfy every cow's desires. Thus FJ would like to know the largest number of cows that can be satisfied. 

To demonstrate the issue, consider four cows with grazing ranges 3..5, 4..8, 1..2, and 5..10; below is a schematic of their grazing 

 

ranges: 

         1   2   3   4   5   6   7   8   9  10  11  12  13

         |---|---|---|---|---|---|---|---|---|---|---|---|-...

                 aaaaaaaaa

                     bbbbbbbbbbbbbbbbb

         ccccc           ddddddddddddddddddddd

 

 

 

 

 

Sample Output

 

 


As can be seen, the first, second and fourth cows share the point 5, 
but the third cow's grazing range is disjoint. Thus, a maximum of 
3 cows can have the soda machine within their grazing range. 
 

OUTPUT DETAILS:

If the soda machine is placed at location 5, cows 1, 2, and 4 can be
satisfied. It is impossible to satisfy all four cows.

Input

 

 

* Line 1: A single integer: N 

* Lines 2..N+1: Line i+1 contains two space-separated integers: A_i 
and B_i 
 

Output

* Line 1: A single integer representing the largest number of cows 
whose grazing intervals can all contain the soda machine. 

Sample Input

4
3 5
4 8
1 2
5 10

Sample Output

3

 

题意:有N个人要去膜拜JZ,他们不知道JZ会出现在哪里,因此每个人有一个活动范围,只要JZ出现在这个范围内就能被膜拜,伟大的JZ当然希望膜拜他的人越多越好,但是JZ不能分身,因此只能选择一个位置出现,他最多可以被多少人膜拜呢,这个简单的问题JZ当然交给你了。

题解:由于a,b过大,我们先将数据离散化之后,再求一遍前缀和就可以了。

Code:

var
  n,i,a,b,max,cnt,dov:longint;
  f,g,x,p:array[0..100005] of longint;
procedure sort(l,r:longint);
var i,j,u,t:longint;
begin
  i:=l;j:=r;u:=f[(l+r) div 2];
  repeat
    while (f[i]<u) do inc(i);
    while (f[j]>u) do dec(j);
    if not(i>j) then
    begin
      t:=f[i];f[i]:=f[j];f[j]:=t;
      t:=x[i];x[i]:=x[j];x[j]:=t;
      inc(i);dec(j);
    end;
  until i>j;
  if l<j then sort(l,j);
  if i<r then sort(i,r);
end;
begin
  readln(n);
  for i:=1 to n do
  begin
    readln(a,b);
    inc(cnt);
    f[cnt]:=a;x[cnt]:=1;
    inc(cnt);
    f[cnt]:=b+1;x[cnt]:=-1;
  end;
  sort(1,cnt);
  for i:=1 to cnt do
    if f[i]<>f[i-1] then
    begin
      inc(dov);
      p[dov]:=x[i];
    end else inc(p[dov],x[i]);
  for i:=1 to dov do
  begin
    g[i]:=g[i-1]+p[i];
    if g[i]>max then max:=g[i]
  end;
  writeln(max);
end.
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JackflyDC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值