hdu 1823 Luck and Love 【二维线段树】
2016-04-16 15:37
453 查看
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int inf=1<<30; const int maxn=5000+10; const double eps=1e-6; struct IntervalTree2D { int mx[500][maxn],n,m; int xo,xleaf,x1,y1,x2,y2,x,y,v,vmax; void query1D(int o,int l,int r) { if(y1<=l&&r<=y2) { //printf("%d %d %d\n",l,r,vmax); vmax=max(mx[xo][o],vmax); } else { int mid=l+(r-l)/2; if(y1<=mid) query1D(o*2,l,mid); if(mid<y2) query1D(o*2+1,mid+1,r); } } void query2D(int o,int l,int r) { if(x1<=l&&r<=x2) { xo=o; query1D(1,1,m); } else { int mid=l+(r-l)/2; if(x1<=mid) query2D(o*2,l,mid); if(mid<x2) query2D(o*2+1,mid+1,r); } } void modify1D(int o,int l,int r) { if(l==r) { if(xleaf) { mx[xo][o]=max(mx[xo][o],v); return ; } mx[xo][o]=max(mx[xo*2][o],mx[xo*2+1][o]); } else { int mid=l+(r-l)/2; if(y<=mid) modify1D(o*2,l,mid); else modify1D(o*2+1,mid+1,r); mx[xo][o]=max(mx[xo][o*2],mx[xo][o*2+1]); } } void modify2D(int o,int l,int r) { if(l==r) { xo=o; xleaf=1; modify1D(1,1,m); } else { int mid=l+(r-l)/2; if(x<=mid) modify2D(o*2,l,mid); else modify2D(o*2+1,mid+1,r); xo=o; xleaf=0; modify1D(1,1,m); } } void query() { vmax=-1; query2D(1,1,n); } void modify() { modify2D(1,1,n); } }; int main() { int n,i,j,x1,x2,x,y,y1,y2,a,l; double a1,a2,l1; char s[10]; while(~scanf("%d",&n)&&n) { IntervalTree2D t; t.n=101; t.m=1001; for(i=1;i<=4*t.n;i++) for(j=1;j<=4*t.m;j++) t.mx[i][j]=-1; //getchar(); while(n--) { scanf("%s",s); if(s[0]=='I') { scanf("%d%lf%lf",&x,&a1,&l1); x=x-100+1; t.x=x; t.y=(int)((a1+eps)*10)+1; t.v=(int)((l1+eps)*10); t.modify(); } else { scanf("%d%d%lf%lf",&x1,&x2,&a1,&a2); x1=x1-100+1; x2=x2-100+1; y1=(int)((a1+eps)*10)+1; y2=(int)((a2+eps)*10)+1; if(x2<x1) swap(x1,x2); if(y1>y2) swap(y1,y2); t.x1=x1; t.x2=x2; t.y1=y1; t.y2=y2; t.query(); //printf("%d %d\n",x1,x2); //printf("%d\n",t.vmax); if(t.vmax==-1) printf("-1\n"); else { double ans=1.0*t.vmax/10; printf("%.1f\n",ans); } } } } return 0; }
相关文章推荐
- Android系统用于Activity的标准Intent
- java泛型基础-I
- 单链表逆序
- 坦克大战游戏1.0版
- 每天一个linux命令(5):rmdir
- 别再感叹科比,他留下的这些已经够我们受用一生!
- java 变量及数据类型、原码、反码、补码
- 关于补码的一些思考
- 对const object(const对象)的理解
- hdu 1068 Girls and Boys 匈牙利算法求最大独立集
- LeetCode *** 275. H-Index II
- DirectX 游戏开发
- 环形缓冲区
- 使用Spring 3的@value简化配置文件的读取
- squid 代理服务
- 多列索引结构和原理
- Jersey(1.19.1) - Representations and Java Types
- 将整数n分成k份,且每份不能为空,任意两种分法不能相同(不考虑顺序)【划分问题】
- PHP表单验证 -w3school PHP学习笔记
- HDU 2602 动态规划01背包