BZOJ 2850: 巧克力王国 KDtree + 估价函数
Description
Input
Output
题解: 关键还是在于启发式估价函数.
如果当前点所维护的矩形的极限大的 $ax+by$ 小于等于 $c$ ,说明全部符合要求.
如果极限小值都不符合要求,说明整个矩形都不合法,返回 $0$ 即可.
#include<bits/stdc++.h>
#define maxn 100000
#define inf 1000000008
#define mid ((l+r)>>1)
#define ll long long
#define lson (t[x].ch[0])
#define rson (t[x].ch[1])
using namespace std;
void setIO(string s)
{
string in=s+".in";
freopen(in.c_str(),"r",stdin);
}
int n,Q,d;
ll C, A[4];
struct Node
{
int minv[2],maxv[2],p[2],ch[2];
ll sumv,w;
}t[maxn];
bool cmp(Node a,Node b)
{
return a.p[d]==b.p[d]?a.p[d^1]<b.p[d^1]:a.p[d]<b.p[d];
}
void pushup(int x,int y)
{
t[x].minv[0]=min(t[x].minv[0], t[y].minv[0]);
t[x].maxv[0]=max(t[x].maxv[0], t[y].maxv[0]);
t[x].minv[1]=min(t[x].minv[1], t[y].minv[1]);
t[x].maxv[1]=max(t[x].maxv[1], t[y].maxv[1]);
t[x].sumv+=t[y].sumv;
}
int build(int l,int r,int o)
{
d=o;
nth_element(t+l,t+mid,t+1+r,cmp);
t[mid].minv[0]=t[mid].maxv[0]=t[mid].p[0];
t[mid].minv[1]=t[mid].maxv[1]=t[mid].p[1];
t[mid].ch[0]=t[mid].ch[1]=0;
t[mid].sumv=t[mid].w;
if(mid>l)
{
t[mid].ch[0]=build(l,mid-1,o^1);
pushup(mid,t[mid].ch[0]);
}
if(r>mid)
{
t[mid].ch[1]=build(mid+1,r,o^1);
pushup(mid,t[mid].ch[1]);
}
return mid;
}
ll qmin(int x,ll a,ll b)
{
ll ans=0;
for(int i=0;i<2;++i)
{
ans+=min(A[i]*1ll*t[x].minv[i], A[i]*1ll*t[x].maxv[i]);
}
return ans;
}
ll qmax(int x,ll a,ll b)
{
ll ans=0;
for(int i=0;i<2;++i)
{
ans+=max(A[i]*1ll*t[x].minv[i], A[i]*1ll*t[x].maxv[i]);
}
return ans;
}
ll query(int x,ll a,ll b)
{
if(qmax(x, a, b) < C) return t[x].sumv;
if(qmin(x, a, b) >= C) return 0;
ll ans=0;
if(1ll*t[x].p[0]*a+1ll*t[x].p[1]*b < C) ans+=t[x].w;
if(lson) ans+=query(lson,a,b);
if(rson) ans+=query(rson,a,b);
return ans;
}
int main()
{
// setIO("input");
scanf("%d%d",&n,&Q);
for(int i=1;i<=n;++i) scanf("%d%d%lld",&t[i].p[0],&t[i].p[1],&t[i].w);
int root=build(1,n,0);
while(Q--)
{
scanf("%lld%lld%lld",&A[0],&A[1],&C);
printf("%lld\n",query(root, A[0], A[1]));
}
return 0;
}
BZOJ 2850: 巧克力王国 KDtree + 估价函数的更多相关文章
- bzoj 2850 巧克力王国——KDtree
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2850 改一下估价即可.判断子树能否整个取或者是否整个不能取,时间好像就能行了? 因为有负数, ...
- 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】巧克力王国 KDtree
[BZOJ2850]巧克力王国 Description 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜 欢过于甜的巧克力.对于每一块巧克力,我们设 ...
- 【BZOJ2850】巧克力王国 [KD-tree]
巧克力王国 Time Limit: 60 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 巧克力王国里的巧克力都是由牛奶和 ...
- BZOJ 1941: [Sdoi2010]Hide and Seek KDtree + 估价函数
Code: #include<bits/stdc++.h> #define maxn 200000 #define inf 1000000000 using namespace std; ...
- BZOJ 4520: [Cqoi2016]K远点对 KDtree + 估价函数 + 堆
Code: #include<bits/stdc++.h> #define ll long long #define maxn 200000 #define inf 10000000000 ...
- 【BZOJ】【2850】【Violet 0】巧克力王国
KD-Tree 问平面内在某条直线下方的点的权值和 我一开始yy的是:直接判这个矩形最高的两个点(y坐标的最大值)是否在这条直线下方就可以了~即判$A*x+B*y<C$... 然而这并不对啊…… ...
随机推荐
- Python基础--基本文件操作
全部的编程语言都一样,学完了一些自带的数据机构后,就要操作文件了. 文件操作才是实战中的王道. 所以,今天就来分享一下Python中关于文件的一些基本操作. open方法 文件模式 这个模式对于写入文 ...
- VBS调用Windows API函数
Demon's Blog 忘记了,喜欢一个人的感觉 Demon's Blog » 程序设计 » VBS调用Windows API函数 « 用VBS修改Windows用户密码 在VB中创建和使用 ...
- PHPthinking官方论坛招募版主
时间飞逝.就在昨天,我们PHPthinking的官方论坛刚刚上线了我们自己的论坛! 欢迎大家注冊账号,活跃在论坛的大家庭中,我们会及时关注论坛公布的全部内容.在开发学习的过程中,遇到的不论什么问题,有 ...
- 【C语言】模拟实现memmove函数(考虑内存重叠)
//模拟实现memmove函数(考虑内存重叠) #include <stdio.h> #include <assert.h> #include <string.h> ...
- border-image 和 border-color 不能同时使用问题
遇到如下问题: UI 给的设计,某部分,上边框为 图片,下边框为灰色横线. 看到这个的第一反应是,上边框用 border-image ,为了只让上边框显示图片,所以只给上边框宽度为所需宽度,我的图是 ...
- 文章编辑器 文本替换 操作dom 发帖 富文本 今日头条发布富文本的实现 键盘化的html
js 修改 iframe it=document.getElementById('ueditor_0').contentWindow.document.getElementsByTagName(& ...
- java使用poi读取doc和docx文件(maven自动导入依赖包)
java使用poi读取doc和docx文件(maven自动导入依赖包) 于是在网上搜寻了一阵之后才发现原来doc文档和excel一样不能用普通的io流的方法来读取,而是也需要用poi,于是进行了一番尝 ...
- Kaggle "Microsoft Malware Classification Challenge"——就是沙箱恶意文件识别,有 Opcode n-gram特征 ASM文件图像纹理特征 还有基于图聚类方法
使用图聚类方法:Malware Classification using Graph Clustering 见 https://github.com/rahulp0491/Malware-Classi ...
- openStack aio nova service-list neutron ext-list
- 图练习-BFS-从起点到目标点的最短步数
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2830 简单bfs #include <s ...