Back to list of problems
The Skyline Problem
105.c
#include <stdio.h> int skyline[10020]; struct building { int L; int H; int R; }; int num; struct building bui[5010]; int main(void) { int i,j; int last=0; int ini=0; memset(skyline, 0, sizeof(skyline)); for(num=0; num<5010; num++) { if (scanf("%d %d %d", &bui[num].L, &bui[num].H, &bui[num].R) != 3) { break; } if (bui[num].L > 10000 || bui[num].R > 10000 || bui[num].L > bui[num].R) { abort(); } } for(i=bui[0].L; i<10020; i++) { int max=0; for(j=0; j<num; j++) { if (bui[j].L <= i && bui[j].R > i) { if (bui[j].H > max) { max = bui[j].H; } } } if (max != last) { last = max; if (ini) { printf(" "); } else { ini=1; } printf("%d %d", i, last); } } printf("\n"); return 0; }