BZOJ1635: [Usaco2007 Jan]Tallest Cow 最高的牛

Posted Blue233333

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ1635: [Usaco2007 Jan]Tallest Cow 最高的牛相关的知识,希望对你有一定的参考价值。

n<=10000个人,第L个人最高,所有人最高高度H,r个关系表示Ai能看到Bi,也就是,Ai到Bi中间的人都比Ai和Bi矮且Bi不比Ai矮,求每个人最高的可能高度,保证有解。

不知道这个L是来搞笑还是干嘛的

假设一开始所有人最高,一个关系就把Ai到Bi间的点做区间减1,最后单点查询,差分下即可。

唯一的坑点是可能有重复描述,记得去个重!

技术分享
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 #include<algorithm>
 5 //#include<assert.h>
 6 #include<math.h>
 7 //#include<iostream>
 8 using namespace std;
 9 
10 int n,h,r;
11 #define maxn 10011
12 int cha[maxn];
13 struct Mes
14 {
15     int x,y;
16     bool operator < (const Mes &b) const {return x<b.x || (x==b.x && y<b.y);}
17     bool operator == (const Mes &b) const {return x==b.x && y==b.y;}
18 }mes[maxn];
19 int main()
20 {
21     int x;
22     scanf("%d%d%d%d",&n,&x,&h,&r);
23     for (int i=1;i<=r;i++)
24     {
25         scanf("%d%d",&mes[i].x,&mes[i].y);
26         if (mes[i].x>mes[i].y) swap(mes[i].x,mes[i].y);
27     }
28     sort(mes+1,mes+1+r);
29     r=unique(mes+1,mes+1+r)-mes-1;
30     memset(cha,0,sizeof(cha));
31     for (int i=1;i<=r;i++) cha[mes[i].x+1]--,cha[mes[i].y]++;
32 //    for (int i=1;i<=n;i++) cout<<cha[i]<<‘ ‘;cout<<endl;
33     x=0;for (int i=1;i<=n;i++) x+=cha[i],printf("%d\n",h+x);
34     return 0;
35 }
View Code

 

以上是关于BZOJ1635: [Usaco2007 Jan]Tallest Cow 最高的牛的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ1635: [Usaco2007 Jan]Tallest Cow 最高的牛

差分BZOJ 1635 [Usaco2007 Jan]Tallest Cow 最高的牛

[BZOJ] 1636: [Usaco2007 Jan]Balanced Lineup

[bzoj 1636][Usaco2007 Jan]Balanced Lineup

[bzoj 1699] [Usaco2007 Jan]Balanced Lineup排队

[BZOJ] 1634: [Usaco2007 Jan]Protecting the Flowers 护花