题目:在一个平面上给出n个底边共线的矩形,求出所有的高度的转折点。
分析:简单题、暴力。由于数据范围是:区间个数5000、区间大小10000,直接利用10000的数组记录每个点的高度,不断在上面更新,最后扫描一遍数组即可。
注意:如果h[i-1] < h[i]输出i,h[i];否则输出i-1,h[i]。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int H[ 10005 ] = {0};
int main()
{
int l,h,r;
while ( scanf("%d%d%d",&l,&h,&r) != EOF )
for ( int i = l ; i <= r ; ++ i )
H[i] = H[i]>h?H[i]:h;
int s = 0,e = 0;
while( !H[s] ) s ++;
printf("%d %d",s,H[s]);
for ( int i = s+1 ; i <= 10001 ; ++ i )
if ( H[i] != H[i-1] ) {
if ( H[i-1] < H[i] )
printf(" %d %d",i,H[i]);
else
printf(" %d %d",i-1,H[i]);
}
printf("\n");
return 0;
}