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 为 ...
随机推荐
- 禁用Clusterware在系统启动后自己主动启动
以下是禁用及启用Clusterware随系统启动而自己主动启动的方法 10g下我们用例如以下方法: 禁用Clusterware随系统启动而自己主动启动 /etc/init.d/init.crs dis ...
- cocosStudio中使用PageView,ListView和ScrollView
晚上吃东西好像吃坏肚子了,.但是技术还要继续研究.最近工作中要使用CocosStudio做界面,好吧,不管对他有什么偏见,学习一下吧.这里主要记录一下三个控件的使用和说明.就是ScrollView,L ...
- C# HTTP请求后对gzip页面实现解压缩
1.通过socket页面请求后的receive内容不能经过string后再进行解压缩处理 会造成错误的gzip幻数报错 推荐使用流处理 2.正确分析返回内容 分割header和页面代码部分 3.对页面 ...
- [笔记] sed and awk
/ awk程序的典型示例是将数据转换成格式化的报表,当数据拥有某种结构时就能最好的体现awk的好处:可以使用awk脚本对数据的列重新排序,甚至可以将列变成行以及将行变成列:awk的功能将文本编辑的思想 ...
- 实例讲解SVN分支和合并问题(转)
本节向大家简单描述一下SVN分支和合并方面的知识,在学习SVN的过程中SVN分支和合并时经常遇到的问题,在这里和大家分享一下,希望本文对大家有用. 关于主线同SVN分支合并的概念及如何使用的误区此问题 ...
- YUV格式
http://blog.csdn.net/u011270282/article/details/50696616 http://blog.csdn.net/acs713/article/details ...
- vim 参数文件配置
下面是我配置的遇到问题不能修改配置文件时的解决方案 1 /usr/share/vim/vimrc 2 这个是系统型的vimrc配置文件,为了保证vim的正常使用,一般并不会修改这个文件, 而是应该在你 ...
- java操作redis学习(一):安装及连接
文章参考自:http://www.cnblogs.com/edisonfeng/p/3571870.html,在此基础上进行了修改. 一.下载安装Redis redis官网显示暂时不支持Windows ...
- php 批量删除数据
php 批量删除数据 :比如我们在看邮箱文件的时候,积攒了一段时间以后,看到有些文件没有用了 这时候我们就会想到把这些 没用的文件删除,这时候就用到了批量删除数据的功能,这里我是用了数据库原有的一个表 ...
- EasyDarwin流媒体云平台:EasyCamera开源摄像机接入海康威视摄像机实时视频
本文转自EasyDarwin团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/52755298 EasyCamera接收云平台实时 ...