题目: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的更多相关文章

  1. BZOJ 2850: 巧克力王国 KDtree + 估价函数

    Code: #include<bits/stdc++.h> #define maxn 100000 #define inf 1000000008 #define mid ((l+r)> ...

  2. bzoj 2850 巧克力王国

    bzoj 2850 巧克力王国 钱限题.题面可以看这里. 显然 \(x\) \(y\) 可以看成坐标平面上的两维,蛋糕可以在坐标平面上表示为 \((x,y)\) ,权值为 \(h\) .用 \(kd- ...

  3. bzoj 2850: 巧克力王国 K-D树

    题目大意 http://www.lydsy.com/JudgeOnline/problem.php?id=2850 题解 对于每个人,我们发现它能够接受的巧克力中 如果对参数分别讨论,那么一定是一个连 ...

  4. bzoj 2850 巧克力王国 —— K-D树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2850 只要暴力判断是否全选一个子树或全不选,如果都不是就进入查询: 要注意值有负,所以不是直 ...

  5. 【BZOJ2850】巧克力王国 [KD-tree]

    巧克力王国 Time Limit: 60 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 巧克力王国里的巧克力都是由牛奶和 ...

  6. 【BZOJ2850】巧克力王国 KDtree

    [BZOJ2850]巧克力王国 Description 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜 欢过于甜的巧克力.对于每一块巧克力,我们设 ...

  7. 【BZOJ】【2850】【Violet 0】巧克力王国

    KD-Tree 问平面内在某条直线下方的点的权值和 我一开始yy的是:直接判这个矩形最高的两个点(y坐标的最大值)是否在这条直线下方就可以了~即判$A*x+B*y<C$... 然而这并不对啊…… ...

  8. 巧克力王国 BZOJ 2850

    巧克力王国 [问题描述] 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力.对于每一块巧克力,我们设x和y为其牛奶和可可的含量.由于 ...

  9. KD-tree 专题「Hide and Seek · 巧克力王国」

    Lockey的瞎理解 抄了一遍板子又水了俩题,感觉对KD-tree 稍稍理解了一点儿,唠叨一下(二维的KD-tree),如有错误请指出(Lockey 洗脸恭听) 普通平衡树维护的是一维的序列,但对于二 ...

随机推荐

  1. Sumdiv(较难数学题)

    Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 20971   Accepted: 5290 Description Cons ...

  2. Java中线程和线程池

    Java中开启多线程的三种方式 1.通过继承Thread实现 public class ThreadDemo extends Thread{ public void run(){ System.out ...

  3. 记录-spring MultipartFile 文件上传

    注意:以下上传和下载方法未必完全正确,不同浏览器效果不同,建议不要使用IE /** * 简单的文件上传 * @author:qiuchen * @createTime:2012-6-19 * @par ...

  4. 我的Android进阶之旅------>Android疯狂连连看游戏的实现之游戏效果预览(一)

    今天看完了李刚老师的<疯狂Android讲义>一书中的第18章<疯狂连连看>,从而学会了如何编写一个简单的Android疯狂连连看游戏. 开发这个流行的小游戏,难度适中,而且能 ...

  5. python多版本管理

    1.查看系统中的安装了那些python版本 2.查看系统中的alternatives命令是否安装 3.使用alternatives --install 接管python -install 选项使用了多 ...

  6. log4j2.xml的例子

    项目中用到的一个log4j2.xml的配置文件: <?xml version="1.0" encoding="UTF-8"?> <!--设置l ...

  7. pinpoint agent线程模型

    pinpoint agent线程模型 以下分析基于pinpoint1.7.1版本 pinpoint agent主要使用到的异步线程有4个 DeadlockMonitorThread : 死锁监测线程, ...

  8. ZOJ - 3761 Easy billiards 【并查集+DFS】

    题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3761 题意 在一个桌面上,给出一些球 如果在A球的某个方向的前方 ...

  9. Java编程思想(第4版) 中文清晰PDF完整版

    Java编程思想(第4版) 中文清晰PDF完整版 [日期:2014-08-11] 来源:Linux社区  作者:Linux [字体:大 中 小]     <Java编程思想>这本书赢得了全 ...

  10. [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...