8 I 160 50.5 60.0 I 165 30.0 80.5 I 166 10.0 50.0 I 170 80.5 77.5 Q 150 166 10.0 60.0 Q 166 177 10.0 50.0 I 166 40.0 99.9 Q 166 177 10.0 50.0 0
#include
#include
#include
using namespace std;
struct sub_tree
{
int l2,r2,Max;
};
struct tree
{
sub_tree c[4444];
int l1,r1;
}E[888];
int m;
void sub_build(int o,int p,int l2,int r2)
{
E[o].c[p].l2=l2;
E[o].c[p].r2=r2;
E[o].c[p].Max=-1;
if (l2==r2) return ;
int mid=(l2+r2)>>1;
sub_build(o,p*2,l2,mid);
sub_build(o,p*2+1,mid+1,r2);
}
void build(int o,int l1,int r1, int l2,int r2)
{
E[o].l1=l1; E[o].r1=r1;
sub_build(o,1,l2,r2);
if (l1==r1) return;
int mid=(l1+r1)>>1;
build(o*2,l1,mid,l2,r2);
build(o*2+1,mid+1,r1,l2,r2);
}
void sub_update(int o,int p,int y1,int y2, int val)
{
E[o].c[p].Max= max( E[o].c[p].Max , val);
if (y1<=E[o].c[p].l2&&E[o].c[p].r2<=y2) return ;
if (E[o].c[p].l2==E[o].c[p].r2) return;
int mid=(E[o].c[p].l2+E[o].c[p].r2)>>1 ;
if (y1<=mid) sub_update(o, p*2, y1, y2 ,val);
if (mid>1;
if ( x1<=mid ) update( 2*o ,x1, x2, y1, y2, val);
if ( x2> mid ) update( 2*o+1, x1, x2 , y1, y2, val);
}
int sub_query(int o, int p, int y1, int y2)
{
if (y1<=E[o].c[p].l2&&E[o].c[p].r2<=y2)
return E[o].c[p].Max;
int mid=(E[o].c[p].l2+E[o].c[p].r2)>>1;
int ans=-1;
if (y1<= mid)
ans=max( ans, sub_query(o, p*2, y1, y2) );
if ( mid< y2)
ans=max( ans, sub_query(o, p*2+1, y1, y2));
return ans;
}
int query(int o,int x1,int x2,int y1,int y2)
{
if (x1<=E[o].l1&&E[o].r1<=x2)
return sub_query( o, 1, y1, y2);
int mid=(E[o].l1+E[o].r1)>>1;
int ans=-1;
if (x1 <= mid)
ans=max(ans, query(o*2, x1, x2, y1, y2));
if (x2 > mid )
ans=max(ans, query(o*2+1,x1, x2, y1, y2));
return ans;
}
int main()
{
while (scanf("%d",&m)!=EOF)
{
if (m==0) break;
build(1,100,200,0,1000);
for (int i=1; i<=m; i++)
{
char s[10];
scanf("%s",s);
if (s[0]=='I')
{
int H;
double A,L;
scanf("%d%lf%lf",&H,&A,&L);
int a=(int)(A*10);
int l=(int)(L*10);
update(1,H,H,a,a,l);
}
else
{
int H1,H2;
double A1,A2;
scanf("%d%d%lf%lf",&H1,&H2,&A1,&A2);
int a1=(int)(A1*10);
int a2=(int)(A2*10);
if (H1>H2) swap(H1,H2);
if (a1>a2) swap(a1,a2);
int ans=query(1,H1,H2,a1,a2);
if (ans<0) printf("-1\n");
else
printf("%.1lf\n",ans/10.);
}
}
}
return 0;
}