BZOJ1635: [Usaco2007 Jan]Tallest Cow 最高的牛
阿新 • • 發佈:2017-10-14
view unique turn gif str fine pen operator open
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>View Code6 #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 == (constMes &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 }
BZOJ1635: [Usaco2007 Jan]Tallest Cow 最高的牛