二维线段树 HDU 1823最简单的入门题
xiaoz 征婚,首先输入M,表示有M个操作。
借下来M行,对每一行 Ih a l I 表示有一个MM报名,H是高度, a是活泼度,L是缘分。
或 Q h1 h2 a1 a2 求出身高在h1 h2 活泼度在a1 a2之间的最大缘分值。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <list>
#include <iomanip>
#include <cstdlib>
#include <sstream>
using namespace std;
typedef long long LL;
const int INF=0x5fffffff;
const double EXP=1e-;
const int MS=; struct active
{
int l,r;
double maxv;
int mid()
{
return (l+r)>>;
}
}; struct node
{
int l,r;
active actives[*MS];
int mid()
{
return (l+r)>>;
}
}nodes[]; void init()
{
for(int i=;i<;i++)
for(int j=;j<*MS;j++)
nodes[i].actives[j].maxv=-;
} void creat_a(int p,int root,int l,int r)
{
nodes[p].actives[root].l=l;
nodes[p].actives[root].r=r;
if(nodes[p].actives[root].l==nodes[p].actives[root].r)
return ;
int mid=(l+r)/;
creat_a(p,root<<,l,mid);
creat_a(p,root<<|,mid+,r);
} void creat(int root,int l,int r)
{
nodes[root].l=l;
nodes[root].r=r;
creat_a(root,,,MS);
if(nodes[root].l==nodes[root].r)
return ;
int mid=(l+r)/;
creat(root<<,l,mid);
creat(root<<|,mid+,r);
} void insert_a(int p,int root,int pos,double value)
{
if(nodes[p].actives[root].maxv<value)
nodes[p].actives[root].maxv=value;
if(nodes[p].actives[root].l==nodes[p].actives[root].r)
return ;
if(pos<=nodes[p].actives[root].mid())
insert_a(p,root<<,pos,value);
else
insert_a(p,root<<|,pos,value);
} void insert(int root,int pos,int value,double s)
{
insert_a(root,,value,s);
if(nodes[root].l==nodes[root].r)
return ;
if(pos<=nodes[root].mid())
insert(root<<,pos,value,s);
else
insert(root<<|,pos,value,s);
} double query_a(int p,int root,int l,int r)
{
double ans=-;
if(nodes[p].actives[root].l>=l&&nodes[p].actives[root].r<=r)
return nodes[p].actives[root].maxv;
if(l<=nodes[p].actives[root].mid())
ans= max(ans,query_a(p,root<<,l,r));
if(r>nodes[p].actives[root].mid())
ans=max(ans,query_a(p,root<<|,l,r));
return ans;
} double query(int root,int l1,int r1,int l2,int r2)
{
double ans=-;
if(nodes[root].l>=l1&&nodes[root].r<=r1)
return query_a(root,,l2,r2);
// 如果是叶子节点会在上一条语句中返回。
if(l1<=nodes[root].mid())
ans=max(ans,query(root<<,l1,r1,l2,r2));
if(r1>nodes[root].mid())
ans=max(ans,query(root<<|,l1,r1,l2,r2));
return ans;
} int main()
{
int n,h1,h2;
double a1,a2,fate;
creat(,,);
while(scanf("%d",&n)==&&n)
{
init();
char cmd[MS];
while(n--)
{
scanf("%s",cmd);
if(cmd[]=='I')
{
scanf("%d %lf %lf",&h1,&a1,&fate); insert(,h1,(int)(a1*+EXP),fate);
}
else
{
scanf("%d %d %lf %lf",&h1,&h2,&a1,&a2);
if(h1>h2)
swap(h1,h2);
if(a1>a2)
swap(a1,a2);
double ans=query(,h1,h2,(int)(a1*+EXP),(int)(a2*+EXP));
if(ans>=)
printf("%.1lf\n",ans);
else
printf("-1\n");
}
}
}
return ;
}
二维线段树 HDU 1823最简单的入门题的更多相关文章
- poj 2155:Matrix(二维线段树,矩阵取反,好题)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17880 Accepted: 6709 Descripti ...
- HDU 1823 Luck and Love(二维线段树)
之前只知道这个东西的大概概念,没具体去写,最近呵呵,今补上. 二维线段树 -- 点更段查 #include <cstdio> #include <cstring> #inclu ...
- HDU 1823 Luck and Love 二维线段树(树套树)
点击打开链接 Luck and Love Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- HDU 4819 Mosaic(13年长春现场 二维线段树)
HDU 4819 Mosaic 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4819 题意:给定一个n*n的矩阵,每次给定一个子矩阵区域(x,y,l) ...
- hdu 4819 二维线段树模板
/* HDU 4819 Mosaic 题意:查询某个矩形内的最大最小值, 修改矩形内某点的值为该矩形(Mi+MA)/2; 二维线段树模板: 区间最值,单点更新. */ #include<bits ...
- HDU 4819 Mosaic (二维线段树)
Mosaic Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)Total S ...
- HDU 4819 Mosaic --二维线段树(树套树)
题意: 给一个矩阵,每次查询一个子矩阵内的最大最小值,然后更新子矩阵中心点为(Max+Min)/2. 解法: 由于是矩阵,且要求区间最大最小和更新单点,很容易想到二维的线段树,可是因为之前没写过二维的 ...
- HDU 4819 Mosaic 二维线段树
Mosaic Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- HDU 4819 Mosaic (二维线段树&区间最值)题解
思路: 二维线段树模板题,马克一下,以后当模板用 代码: #include<cstdio> #include<cmath> #include<cstring> #i ...
随机推荐
- centos6.4 安装erlang
erlang官网: http://www.erlang.org 下载程序去年:
- JS代码格式化修改表格的数值的格式
今天在cognos中第一次需要用到JS,主要是报表页面展示的时候是可能得到如下的数据 ,我需要对其中类型中有金额字样的,后面的数值,精确2位小数:有百分比字样的,数值显示成百分比.如下. 我先尝试了自 ...
- HDU 1702 http://acm.hdu.edu.cn/showproblem.php?pid=1702
#include<stdio.h> #include<string.h> #include<queue> #include<stack> #define ...
- [iOS微博项目 - 1.7] - 版本新特性
A.版本新特性 1.需求 第一次使用新版本的时候,不直接进入app,而是展示新特性界面 github: https://github.com/hellovoidworld/HVWWeibo ...
- [iOS UI进阶 - 2.1] 彩票Demo v1.1
A.需求 1.优化项目设置 2.自定义导航栏标题按钮 3.多版本处理 4.iOS6和iOS7的适配 5.设置按钮背景 6.设置值UIBarButtonItem样式 code source: htt ...
- 修改eclipse默认编码方式
设置js文件的默认编码格式为UTF-8 在Windows->Preference页面中,选择General->Content Types ...
- 2015年必火的五个Html5移动开发工具推荐
NO.1 DCloudHBuilder:基于HTML5开发工具 中文官网:http://www.dcloud.io/ DCloudHBuilder:基于HTML5开发工具是当前最快的HTML开发工 ...
- mahout算法源码分析之Itembased Collaborative Filtering(二)RowSimilarityJob
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 本篇开始之前先来验证前篇blog的分析结果,编写下面的测试文件来进行对上篇三个job的输出进行读取: p ...
- KVM学习笔记
检查机器是否启用KVM lsmod |grep kvm 安装KVM yum install libvirt python-virtinst qemu-kvm virt-viewer bridge-ut ...
- Unity3D之Mecanim动画系统学习笔记(十一):高级功能应用
动作游戏 还记得读书的时候熬夜打<波斯王子>的时光,我们的王子通过跳跃穿过墙壁的小洞.在高层建筑上进行攀爬和跳跃,还有在操作失误掉下高楼和触发必死机关后使用时之沙的时光倒流功能回归死亡之前 ...