bzoj 2850 巧克力王国——KDtree
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2850
改一下估价即可。判断子树能否整个取或者是否整个不能取,时间好像就能行了?
因为有负数,所以判一下四个边界。注意这个区域本身还占了一个点。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=5e4+;
int n,m,rt,tot,fx;
ll A,B,C;
struct Dt{
ll x[],y[],p[],h,ph;
}a[N];
bool cmp(Dt u,Dt v){return u.p[fx]<v.p[fx];}
struct KD{
int c[N][];Dt s[N];
void add(int cr,Dt k)
{
for(int i=;i<=;i++) s[cr].x[i]=s[cr].y[i]=s[cr].p[i]=k.p[i];
s[cr].h=s[cr].ph=k.h;
}
void pshp(int cr)
{
int ls=c[cr][],rs=c[cr][];
for(int i=;i<=;i++)
{
if(ls) s[cr].x[i]=min(s[cr].x[i],s[ls].x[i]),
s[cr].y[i]=max(s[cr].y[i],s[ls].y[i]);
if(rs) s[cr].x[i]=min(s[cr].x[i],s[rs].x[i]),
s[cr].y[i]=max(s[cr].y[i],s[rs].y[i]);
}
s[cr].h=(ls?s[ls].h:)+(rs?s[rs].h:)+s[cr].ph;
}
void build(int &cr,int l,int r,bool now)
{
int mid=l+r>>; fx=now; nth_element(a+l,a+mid,a+r+,cmp);
cr=++tot; add(cr,a[mid]);
if(l<mid) build(c[cr][],l,mid-,!now);
if(mid<r) build(c[cr][],mid+,r,!now);
pshp(cr);
// printf("cr=%d(x:%lld~%lld y:%lld~%lld h=%lld)\n",cr,s[cr].x[0],
// s[cr].y[0],s[cr].x[1],s[cr].y[1],s[cr].h);
}
int check(int cr)
{
int ret=;
ret+=(A*s[cr].x[]+B*s[cr].x[]<C);
ret+=(A*s[cr].x[]+B*s[cr].y[]<C);
ret+=(A*s[cr].y[]+B*s[cr].x[]<C);
ret+=(A*s[cr].y[]+B*s[cr].y[]<C);
return ret;
}
ll query(int cr)
{
ll ret=(A*s[cr].p[]+B*s[cr].p[]<C?s[cr].ph:);
int ls=c[cr][],rs=c[cr][];
int dl=(ls?check(ls):),dr=(rs?check(rs):);
// printf("cr=%d(x:%lld~%lld y:%lld~%lld h=%lld) dl=%d dr=%d\n"
// ,cr,s[cr].x[0],s[cr].y[0],s[cr].x[1],s[cr].y[1],s[cr].h,dl,dr);
if(dl==) ret+=s[ls].h; else if(dl) ret+=query(ls);
if(dr==) ret+=s[rs].h; else if(dr) ret+=query(rs);
return ret;
}
}kd;
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%lld%lld%lld",&a[i].p[],&a[i].p[],&a[i].h);
kd.build(rt,,n,);
for(int i=;i<=m;i++)
{
scanf("%lld%lld%lld",&A,&B,&C);
printf("%lld\n",kd.query(rt));
}
return ;
}
bzoj 2850 巧克力王国——KDtree的更多相关文章
- BZOJ 2850: 巧克力王国 KDtree + 估价函数
Code: #include<bits/stdc++.h> #define maxn 100000 #define inf 1000000008 #define mid ((l+r)> ...
- bzoj 2850 巧克力王国
bzoj 2850 巧克力王国 钱限题.题面可以看这里. 显然 \(x\) \(y\) 可以看成坐标平面上的两维,蛋糕可以在坐标平面上表示为 \((x,y)\) ,权值为 \(h\) .用 \(kd- ...
- bzoj 2850: 巧克力王国 K-D树
题目大意 http://www.lydsy.com/JudgeOnline/problem.php?id=2850 题解 对于每个人,我们发现它能够接受的巧克力中 如果对参数分别讨论,那么一定是一个连 ...
- bzoj 2850 巧克力王国 —— K-D树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2850 只要暴力判断是否全选一个子树或全不选,如果都不是就进入查询: 要注意值有负,所以不是直 ...
- 【BZOJ2850】巧克力王国 [KD-tree]
巧克力王国 Time Limit: 60 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 巧克力王国里的巧克力都是由牛奶和 ...
- 【BZOJ2850】巧克力王国 KDtree
[BZOJ2850]巧克力王国 Description 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜 欢过于甜的巧克力.对于每一块巧克力,我们设 ...
- 【BZOJ】【2850】【Violet 0】巧克力王国
KD-Tree 问平面内在某条直线下方的点的权值和 我一开始yy的是:直接判这个矩形最高的两个点(y坐标的最大值)是否在这条直线下方就可以了~即判$A*x+B*y<C$... 然而这并不对啊…… ...
- 巧克力王国 BZOJ 2850
巧克力王国 [问题描述] 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力.对于每一块巧克力,我们设x和y为其牛奶和可可的含量.由于 ...
- KD-tree 专题「Hide and Seek · 巧克力王国」
Lockey的瞎理解 抄了一遍板子又水了俩题,感觉对KD-tree 稍稍理解了一点儿,唠叨一下(二维的KD-tree),如有错误请指出(Lockey 洗脸恭听) 普通平衡树维护的是一维的序列,但对于二 ...
随机推荐
- 《Hive编程指南》问题
1.Hive不支持记录级别的更新.插入或删除? 2.sort by 和 order by 的区别? https://blog.csdn.net/jthink_/article/details/3890 ...
- 学院名单-211院校研招学院-中国教育在线(www.eol.cn)170915164402
[数据结果] 学校数.学院数:112,2657. [数据来源] 中国教育在线(www.eol.cn)211院校研招学院. http://www.eol.cn/html/ky/gxmd/211.shtm ...
- iOS 蓝牙开发之(CoreBlueTooth)
CoreBlueTooth 简介: 可用于第三方的蓝牙交互设备 设备必须支持蓝牙4.0 iPhone的设备必须是4S或者更新 iPad设备必须是iPad mini或者更新 iOS的系统必须是iOS 6 ...
- 我的Android进阶之旅------>如何将Activity变为半透明的对话框?
我的Android进阶之旅------>如何将Activity变为半透明的对话框?可以从两个方面来考虑:对话框和半透明. 在定义Activity时指定Theme.Dialog主题就可以将Acti ...
- The path "fos_user.from_email.address" cannot contain an empty value, but got null.
The path "fos_user.from_email.address" cannot contain an empty value, but got null.. 修改 pa ...
- Oracle视图传递参数
在Oracle里,视图不像存储过程和函数一样,可以定义输入参数,但我们可以变个方式,使用程序包来实现. oracle package: oracle package是oracle包,是一组相关过程.函 ...
- 路由器桥接(WIFI无线中继)设置及摆放位置图解
路由器桥接(WIFI无线中继)设置及摆放位置图解 WIFI实在好用,但它的波覆盖面小.穿透力很差.我们安装时要考虑波的衍射特点,装在衍射效果最佳的位置(居中,室外可绕,避开密封墙).确实无法兼顾的地方 ...
- python学习-4-类的使用
class Animal: def __init__(self, name): # Constructor of the class self.name = name def talk(self): ...
- Java中byte转换int时与0xff进行与运算的原因
http://w.baike.com/LGAdcWgJBBQxRAHUf.html 转帖 java中byte转换int时为何与0xff进行与运算 在剖析该问题前请看如下代码 public static ...
- iOS 开发规范
公司来了大牛 是绝好的学习机会 今天分享了我们一个代码规范 比如UITableViewCell 1.首先根据这个cell 需要的数据源 建一个数据model ,只针对于 该cell 好处:数据独立 ...