悬双关,十分钟内到账
#include <iostream>
#include <cstdio>
#include <algorithm>
#define ll long long
using namespace std;
const ll N=2e2,M=1e3,INF=1e10;
struct tree{
ll trr[4*M+5];
void changetrr(ll p,ll l,ll r,ll x,ll y,ll z){
if(x<=l && r<=y){
trr[p]=z;
return;
}
ll mid=(l+r)>>1;
if(y<=mid) changetrr(2*p,l,mid,x,y,z);
else if(mid+1<=x) changetrr(2*p+1,mid+1,r,x,y,z);
else{
changetrr(2*p,l,mid,x,mid,z);
changetrr(2*p+1,mid+1,r,mid+1,y,z);
}
trr[p]=max(trr[2*p],trr[2*p+1]);
return;
}
ll searchtrr(ll p,ll l,ll r,ll x,ll y){
if(l==x && r==y) return trr[p];
ll s=-INF,mid=(l+r)>>1;
if(y<=mid) s=max(s,searchtrr(2*p,l,mid,x,y));
else if(mid+1<=x) s=max(s,searchtrr(2*p+1,mid+1,r,x,y));
else{
s=max(s,searchtrr(2*p,l,mid,x,mid));
s=max(s,searchtrr(2*p+1,mid+1,r,mid+1,y));
}
return s;
}
}tr[4*N+5];
void changetr(ll p,ll l,ll r,ll x,ll y,ll z){
tr[p].changetrr(1,0,M,y,y,z);
if(l==x && r==x) return;
ll mid=(l+r)>>1;
if(x<=mid) changetr(2*p,l,mid,x,y,z);
else changetr(2*p+1,mid+1,r,x,y,z);
return;
}
ll searchtr(ll p,ll l,ll r,ll x,ll xx,ll y,ll yy){
if(l==x && r==xx) return tr[p].searchtrr(1,0,M,y,yy);
ll s=-INF,mid=(l+r)>>1;
if(xx<=mid) s=max(s,searchtr(2*p,l,mid,x,xx,y,yy));
else if(mid+1<=x) s=max(s,searchtr(2*p+1,mid+1,r,x,xx,y,yy));
else{
s=max(s,searchtr(2*p,l,mid,x,mid,y,yy));
s=max(s,searchtr(2*p+1,mid+1,r,mid+1,xx,y,yy));
}
return s;
}
ll m;
int main(){
while(scanf("%lld",&m)){
if(m==0) return 0;
for(ll i=1;i<=4*N;i++){
for(ll j=1;j<=4*M;j++) tr[i].trr[j]=-INF;
}
while(m--){
char c;
ll h,hh;
double a,l,aa;
cin>>c;
if(c=='I'){
scanf("%lld%lf%lf",&h,&a,&l);
a*=10,l*=10;
changetr(1,1,N,h,(ll)a,(ll)l);
}
else if(c=='Q'){
scanf("%lld%lld%lf%lf",&h,&hh,&a,&aa);
a*=10,aa*=10;
if(h>hh) swap(h,hh);
if(a>aa) swap(a,aa);
ll ans=searchtr(1,1,N,h,hh,(ll)a,(ll)aa);
if(ans==-INF) printf("-1\n");
else printf("%lld.%lld\n",ans/10,ans%10);
}
}
}
return 0;
}
诶呀呀,你看我这都调不出来呀~~