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$... 然而这并不对啊…… ...
随机推荐
- HDU 1814 Peaceful Commission(2-sat 模板题输出最小字典序解决方式)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1814 Problem Description The Public Peace Commission ...
- linux ifconfig命令配置ip地址
Linux下网卡命名规律:eth0,eth1. 第一块以太网卡.第二块. lo为环回接口,它的IP地址固定为127.0.0.1.掩码8位. 它代表你的机器本身. ifconfig [Interfa ...
- js实现伪音乐盒
支持快进 <div class="music-part"> <div class="box-bg"></div> <d ...
- 逆向工程之App脱壳
http://www.cnblogs.com/ludashi/p/5725743.html iOS逆向工程之App脱壳 本篇博客以微信为例,给微信脱壳."砸壳"在iOS逆向工程中是 ...
- oc75--不可变字典NSDictionary
// // main.m // NSDictionary // // #import <Foundation/Foundation.h> int main(int argc, const ...
- Timus 1146. Maximum Sum
1146. Maximum Sum Time limit: 0.5 secondMemory limit: 64 MB Given a 2-dimensional array of positive ...
- dotnet core 文档链接
The installation was successful The following were installed at C:\Program Files\dotnet • .NET Core ...
- C# 数据库访问
C# 数据库访问 分类: C#学习笔记2011-07-05 11:26 515人阅读 评论(0) 收藏 举报 数据库c#datasettextboxcommandexception 目录(?)[+ ...
- 【Poj3241】Object Clustering
Position: http://poj.org/problem?id=3241 List Poj3241 Object Clustering List Description Knowledge S ...
- luogu 3808 【模板】AC自动机(简单版)
我太菜了 棒神%%% #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib ...