二维线段树 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 ...
随机推荐
- MFC学习知识点20160715
1. sizeof() :返回所查询目标所占用字节数 _countof() :返回所查询目标所含有元素个数 _countof 是 C++中计算一个固定大小数组长度的宏,比如: T arr[10] ...
- [置顶] Kendo UI开发教程: Kendo UI 示例及总结
前面基本介绍完Kendo UI开发的基本概念和开发步骤,Kendo UI的示例网站为http://demos.kendoui.com/ ,包含了三个部分 Web DemoMobile DemoData ...
- HTML5每日一练之details展开收缩标签的应用
details标签的出现,为我们带来了更好的用户体验,不必为这种收缩展开的效果再编写JS来实现.注:目前仅Chrome支持此标签. details有一个新增加的子标签——summary,当鼠标点击su ...
- HDU 3072 Intelligence System (强连通分量)
Intelligence System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- JSF 2 listbox example
In JSF, <h:selectOneListbox /> tag is used to render a single select listbox – HTML select ele ...
- Spring + JdbcTemplate + JdbcDaoSupport examples
In Spring JDBC development, you can use JdbcTemplate and JdbcDaoSupport classes to simplify the over ...
- BNU 51276 - 道路修建 Small (并查集)
题目链接:http://www.bnuoj.com/v3/problem_show.php?pid=51276 具体题意不描述了,一眼看过去就是并查集,关键是添加边以后更新答案.我是开个二维的数组an ...
- CentOS 7安装iptables服务,以及常用命令
之前使用的是CentOS6.5,并且学艺不精,用啥查啥,用完就忘.并且网上大部分资料是基于CentOS7之前的版本. 在CentOS7中,默认的防火墙不是iptables,而是firewalld.而且 ...
- Vue2.0表单校验组件vee-validate的使用
vee-validate使用教程 *本文适合有一定Vue2.0基础的同学参考,根据项目的实际情况来使用,关于Vue的使用不做多余解释.本人也是一边学习一边使用,如果错误之处敬请批评指出* 一.安装 n ...
- iOS开发笔记系列-基础5(分类和协议)
分类 在Objective-C中,除了通过新建子类的方式来向类添加新方法外,还可以通过分类的方式.分类提供了一种简单的方式,将类的定义模块化到相关方法的组或分类中,它还提供了扩展现有类定义的简便方式, ...