-
Notifications
You must be signed in to change notification settings - Fork 0
/
221.cpp
84 lines (79 loc) · 1.63 KB
/
221.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <set>
#include <iterator>
#include <vector>
#define all(c) (c).begin(),(c).end()
#define ffor(c,i) for(typeof((c).begin())i = (c).begin(); i != (c).end(); i++)
using namespace std;
struct edificio {
int n;
float x,y,w,d,h;
};
struct comp{
bool operator()(edificio a, edificio b) {
if (a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
};
int main() {
#ifndef ONLINE_JUDGE
freopen("221.in","r",stdin);
#endif
int i,j,n,map=1,b;
vector <edificio>v;
set <edificio,comp> s;
set <edificio>::iterator it;
edificio tmp;
while(scanf("%d",&n)==1 && n!=0) {
if (map!=1)
printf("\n");
s.clear();
v.clear();
for (i=1;i<=n;i++){
scanf("%f %f %f %f %f\n",&tmp.x,&tmp.y,&tmp.w,&tmp.d,&tmp.h);
tmp.n=i;
//v.push_back(tmp);
it=upper_bound(s.begin(),s.end(),tmp,comp());
b=1;
if(it==s.end())
s.insert(tmp);
else {
printf("%d<%.0f> %d<%.0f>\n",it->n,it->x,tmp.n,tmp.x);
if(it->x==tmp.x){
printf("*\n");
//if (it->y<tmp.y)
//if(it->h>=tmp.h)
//tmp.n=-1;
b=0;
}
}
if(b){
s.insert(tmp);
}
}
//sort(v.begin(),v.end(),comp);
printf("For map #%d, the visible buildings are numbered as follows:\n",map++);
/*for (i=0,j=-1;i<v.size();i++,j++) {
if(j>=0){
if(v[j].x==v[i].x){
if(v[j].y<v[i].y){
if (v[j].h>=v[i].h)
v[i].n=-1;
}
}
}
}*/
/*
for (i=0;i<v.size();i++) {
if(v[i].n!=-1)
printf("%d ",v[i].n);
}*/
ffor(s,it)
printf("%d ",it->n);
printf("\n");
}
return 0;
}