BZOJ_2850_巧克力王国_KDTree
BZOJ_2850_巧克力王国_KDTree
Description
Input
Output
Sample Input
1 2 5
3 1 4
2 2 1
2 1 6
1 3 5
1 3 7
Sample Output
0
4
HINT
1 <= n, m <= 50000,1 <= 10^9,-10^9 <= a, b, x, y <= 10^9。
正解不是KdTree,这玩意非矩形查询的复杂度好像是O(n^2)的。
不过这题可以做。
直接判矩形四个点是否都被包含/都不被包含即可。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
#define N 50050
#define ls ch[p][0]
#define rs ch[p][1]
#define _min(x,y) ((x)<(y)?(x):(y))
#define _max(x,y) ((x)>(y)?(x):(y))
int ch[N][2],mx[N][2],mn[N][2],n,root,m,now;
ll sum[N];
struct Point {
int p[2],v;
bool operator < (const Point &x) const {
return p[now]==x.p[now]?p[!now]<x.p[!now]:p[now]<x.p[now];
}
}a[N];
void pushup(int p,int x) {
mx[p][0]=_max(mx[p][0],mx[x][0]);
mn[p][0]=_min(mn[p][0],mn[x][0]);
mx[p][1]=_max(mx[p][1],mx[x][1]);
mn[p][1]=_min(mn[p][1],mn[x][1]);
sum[p]+=sum[x];
}
int build(int l,int r,int type) {
int mid=(l+r)>>1; now=type;
nth_element(a+l,a+mid,a+r+1);
mn[mid][0]=mx[mid][0]=a[mid].p[0];
mn[mid][1]=mx[mid][1]=a[mid].p[1];
sum[mid]=a[mid].v;
if(l<mid) ch[mid][0]=build(l,mid-1,!type),pushup(mid,ch[mid][0]);
if(r>mid) ch[mid][1]=build(mid+1,r,!type),pushup(mid,ch[mid][1]);
return mid;
}
int check(ll x,ll y,ll z,int p) {
return (x*mn[p][0]+y*mn[p][1]<z)+(x*mx[p][0]+y*mn[p][1]<z)+(x*mn[p][0]+y*mx[p][1]<z)+(x*mx[p][0]+y*mx[p][1]<z);
}
ll query(ll x,ll y,ll z,int p) {
int tmp=check(x,y,z,p);
if(!tmp) return 0;
if(tmp==4) return sum[p];
ll re=0;
if(1ll*x*a[p].p[0]+1ll*y*a[p].p[1]<z) re+=a[p].v;
if(ls) re+=query(x,y,z,ls);
if(rs) re+=query(x,y,z,rs);
return re;
}
int main() {
scanf("%d%d",&n,&m);
int i;
ll x,y,z;
for(i=1;i<=n;i++) {
scanf("%d%d%d",&a[i].p[0],&a[i].p[1],&a[i].v);
}
root=build(1,n,0);
for(i=1;i<=m;i++) {
scanf("%lld%lld%lld",&x,&y,&z);
printf("%lld\n",query(x,y,z,root));
}
}
BZOJ_2850_巧克力王国_KDTree的更多相关文章
- [bzoj2850]巧克力王国_KD-Tree
巧克力王国 bzoj-2850 题目大意:给出n块巧克力,每块巧克力都有自己的两个参数x和y和本身的价值val,询问:m个人,每个人有两个系数和一个限度a,b,和c.求所有ax+by<=c的巧克 ...
- Bzoj2850 巧克力王国
Time Limit: 60 Sec Memory Limit: 512 MBSubmit: 505 Solved: 204 Description 巧克力王国里的巧克力都是由牛奶和可可做成的.但 ...
- BZOJ2820 - 巧克力王国
原题链接 Description 给出个二维平面上的点,第个点为,权值为.接下来次询问,给出,求所有满足的点的权值和. Solution 对于这个点建一棵k-d树,子树维护一个子树和. 如果子树所代表 ...
- 洛谷 P4475 巧克力王国 解题报告
P4475 巧克力王国 题目描述 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力. 对于每一块巧克力,我们设 \(x\) 和 \( ...
- 【BZOJ】【2850】【Violet 0】巧克力王国
KD-Tree 问平面内在某条直线下方的点的权值和 我一开始yy的是:直接判这个矩形最高的两个点(y坐标的最大值)是否在这条直线下方就可以了~即判$A*x+B*y<C$... 然而这并不对啊…… ...
- bzoj 2850 巧克力王国
bzoj 2850 巧克力王国 钱限题.题面可以看这里. 显然 \(x\) \(y\) 可以看成坐标平面上的两维,蛋糕可以在坐标平面上表示为 \((x,y)\) ,权值为 \(h\) .用 \(kd- ...
- LG4475 巧克力王国
题意 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力. 对于每一块巧克力,我们设 x 和 y 为其牛奶和可可的含量.由于每个人对于 ...
- 【BZOJ2850】巧克力王国 [KD-tree]
巧克力王国 Time Limit: 60 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 巧克力王国里的巧克力都是由牛奶和 ...
- 洛谷P4475 巧克力王国
洛谷P4475 巧克力王国 题目描述 巧克力王国里的巧克力都是由牛奶和可可做成的. 但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力. 对于每一块巧克力,我们设 x 和 y 为 ...
随机推荐
- Oracle-31-对视图DML操作
一.对视图进行DML操作 1.创建一个视图v_person create or replace noforceview v_person as select *from person where id ...
- Linux基础(4)-硬盘分区、格式化及文件系统的管理、软件包的管理、yum管理RPM包和python的源码安装
一: 1) 开启Linux系统前添加一块大小为15G的SCSI硬盘 2) 开启系统,右击桌面,打开终端 3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑 ...
- 关于ASP.NET MVC中Response.Redirect和RedirectToAction的BUG (跳转后继续执行后面代码而不结束进程)以及处理方法
关于ASP.NET MVC中Response.Redirect和RedirectToAction的BUG (跳转后继续执行后面代码而不结束进程)以及处理方法 在传统的ASP.NET中,使用Resp ...
- Regex 手机号 座机 正則表達式
近期在工作中须要推断一个号码是否是手机号,是否是座机号. 在网上也搜到了大家总结的方法,没有直接使用这些方法是由于:手机号码在不断開始新的号码段(比方17x).座机号中个别区号由于行政区域的变化而废除 ...
- 设置Ubuntu 16.04 LTS的Unity启动器的位置命令
将Ubuntu 16.04 LTS的Unity启动器移动到桌面底部命令:gsettings set com.canonical.Unity.Launcher launcher-position Bot ...
- 5分钟快速入门Markdown
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. Markdown的语法简洁明了.学习容易,而且功能比纯文本更强,因此有很多人用它写 ...
- CAS 单点登录原理
访问服务: 浏览器发送请求访问应用系统 定向认证: 应用系统重定向用户请求到 SSO 服务器. 用户认证:用户身份认证. 发放票据: 认证通过后,SSO 服务器会产生一个随机的 Service Tic ...
- mac gem命令
$ gem sources -r https://rubygems.org/ (移除旧版本的镜像,如果你不知道你电脑上目前用的是什么镜像,可用 $ gem sources -l 来查看) $ g ...
- EasyIPCamera高性能摄像机RTSP服务器RTSPServer解决方案
EasyIPCamera EasyIPCamera是由EasyDarwin团队开发的一套非常稳定.易用.支持多种平台(包括Windows/Linux 32&64,Android,ARM his ...
- easyui datagrid 加载静态文件中的json数据
本文主要介绍easyui datagrid 怎么加载静态文件里的json数据,开发环境vs2012, 一.json文件所处的位置 二.json文件内容 {"total":28,&q ...