HDOJ 1823 Luck and Love
4354 ワード
2 D線分ツリーテンプレートの問題...
Luck and Love
Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5397 Accepted Submission(s): 1348
Problem Description
世界で一番遠い距離は天地の果てではない.
君の前にいる
あなたは私があなたを爱することを知らない
―― 張小?
先日、枫氷の叶がWiskeyに结婚式のお知らせをしました.招聘礼は500万に达しましたよ.なんてことだ.でも、天文数字ですね.何MMが押し寄せてきたのか、すぐに万人が路地裏にいて、掃除のおばさんまでにぎやかになりました.
人数が多すぎて、Wiskeyが忙しくて手が回らないので、統計のことは全部楓氷葉子に任せて、自分で家に帰って休みました.これはカエデの氷の葉が忙しくて、彼が処理しなければならないのは2種類の事があって、1つはMMの申し込みを受け入れなければならなくて、2つはWiskeyを手伝って要求に合ったMMの中で縁の最高値を探します.
Input
本題には複数のテストデータがあり、最初の数字Mは、次に連続するM個の操作があることを示し、M=0の場合、処理は中止される.
次はオペレータCです.
オペレータが“I”の时、1つのMMが申し込むことを表して、后ろに1つの整数が続いて、Hは身长を表して、2つの浮動小数点数、Aは活発度を表して、Lは縁の値を表します.(100<=H<=200, 0.0<=A,L<=100.0)
オペレータが「Q」である場合、後から4つの浮動小数点数、H 1、H 2は身長区間、A 1、A 2は活発度区間、身長と活発度の要求に合致するMMの中の縁最高値を出力する.(100<=H1,H2<=200, 0.0<=A1,A2<=100.0)
すべての入力浮動小数点数は、小数点数が1つしかありません.
Output
質問操作ごとに、1行に縁の最高値を出力し、小数点を保持します.
見つからない問い合わせに対して、-1を出力します.
Sample Input
Sample Output
Author
ウイスキー
Source
HDOJ 2007 Summer Exercise(3)- Hold by Wiskey
Luck and Love
Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5397 Accepted Submission(s): 1348
Problem Description
世界で一番遠い距離は天地の果てではない.
君の前にいる
あなたは私があなたを爱することを知らない
―― 張小?
先日、枫氷の叶がWiskeyに结婚式のお知らせをしました.招聘礼は500万に达しましたよ.なんてことだ.でも、天文数字ですね.何MMが押し寄せてきたのか、すぐに万人が路地裏にいて、掃除のおばさんまでにぎやかになりました.
人数が多すぎて、Wiskeyが忙しくて手が回らないので、統計のことは全部楓氷葉子に任せて、自分で家に帰って休みました.これはカエデの氷の葉が忙しくて、彼が処理しなければならないのは2種類の事があって、1つはMMの申し込みを受け入れなければならなくて、2つはWiskeyを手伝って要求に合ったMMの中で縁の最高値を探します.
Input
本題には複数のテストデータがあり、最初の数字Mは、次に連続するM個の操作があることを示し、M=0の場合、処理は中止される.
次はオペレータCです.
オペレータが“I”の时、1つのMMが申し込むことを表して、后ろに1つの整数が続いて、Hは身长を表して、2つの浮動小数点数、Aは活発度を表して、Lは縁の値を表します.(100<=H<=200, 0.0<=A,L<=100.0)
オペレータが「Q」である場合、後から4つの浮動小数点数、H 1、H 2は身長区間、A 1、A 2は活発度区間、身長と活発度の要求に合致するMMの中の縁最高値を出力する.(100<=H1,H2<=200, 0.0<=A1,A2<=100.0)
すべての入力浮動小数点数は、小数点数が1つしかありません.
Output
質問操作ごとに、1行に縁の最高値を出力し、小数点を保持します.
見つからない問い合わせに対して、-1を出力します.
Sample Input
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
Sample Output
80.5
50.0
99.9
Author
ウイスキー
Source
HDOJ 2007 Summer Exercise(3)- Hold by Wiskey
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const double eps=1e-6;
const int maxn=2100;
int xL,xR,yL,yR,Value;
int Max[220<<2][maxn<<2];
int N,M;
int maxv;
void pushup(int xrt,int rt)
{
Max[xrt][rt]=max(Max[xrt][rt<<1],Max[xrt][rt<<1|1]);
}
void updateY(int xrt,int x,int l,int r,int rt)
{
if(l==r)
{
if(x==-1)
{
Max[xrt][rt]=max(Max[xrt<<1][rt],Max[xrt<<1|1][rt]);
}
else
{
Max[xrt][rt]=max(Max[xrt][rt],Value);
}
return ;
}
int m=(l+r)/2;
if(yL<=m) updateY(xrt,x,lson);
else updateY(xrt,x,rson);
pushup(xrt,rt);
}
void updateX(int l,int r,int rt)
{
if(l==r)
{
updateY(rt,l,1,M,1);
return ;
}
int m=(l+r)/2;
if(xL<=m) updateX(lson);
else updateX(rson);
updateY(rt,-1,1,M,1);
}
void queryY(int xrt,int l,int r,int rt)
{
if(yL<=l&&r<=yR)
{
maxv=max(maxv,Max[xrt][rt]);
return ;
}
int m=(l+r)/2;
if(yL<=m) queryY(xrt,lson);
if(yR>m) queryY(xrt,rson);
}
void queryX(int l,int r,int rt)
{
if(xL<=l&&r<=xR)
{
queryY(rt,1,M,1);
return ;
}
int m=(l+r)/2;
if(xL<=m) queryX(lson);
if(xR>m) queryX(rson);
}
int main()
{
int op;char cmd[20];
N=200;M=2100;
while(scanf("%d",&op)!=EOF&&op)
{
memset(Max,-1,sizeof(Max));
while(op--)
{
scanf("%s",cmd);
if(cmd[0]=='I')
{
int H;
double a,l;
scanf("%d%lf%lf",&H,&a,&l);
H-=99;
int A=(int)((a+eps)*10);
int L=(int)((l+eps)*10);
xL=H;yL=A;Value=L;
updateX(1,N,1);
}
else if(cmd[0]=='Q')
{
int H1,H2;
double a1,a2;
scanf("%d%d%lf%lf",&H1,&H2,&a1,&a2);
int A1=(int)((a1+eps)*10);
int A2=(int)((a2+eps)*10);
xL=min(H1,H2)-99,xR=max(H1,H2)-99;
yL=min(A1,A2),yR=max(A1,A2);
maxv=-(1<<30);
queryX(1,N,1);
if(maxv==-1) printf("-1
");
else printf("%.1lf
",maxv/10.);
}
}
}
return 0;
}