巧克力王国

巧克力王国里的巧克力都是由牛奶和可可做成的。但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力。

对于每一块巧克力,我们设 x 和 y 为其牛奶和可可的含量。由于每个人对于甜的程度都有自己的评判标准,所以每个人都有两个参数 a 和 b ,分别为他自己为牛奶和可可定义的权重, 因此牛奶和可可含量分别为 x 和 y 的巧克力对于他的甜味程度即为 ax+by。而每个人又有一个甜味限度 c ,所有甜味程度大于等于 c 的巧克力他都无法接受。每块巧克力都有一个美味值 h 。

现在我们想知道对于每个人,他所能接受的巧克力的美味值之和为多少。

CQzhangyu的题解

看起来ax+by<c挺难搞,但其实只要改一改KDtree的估价函数就好了,具体见代码

其实就是判断一下矩形的四个角是否在半平面内。

注意:别忘了a,b,x,y可以是负数,负负能得正!

据说复杂度是每次询问期望√n,但我感觉这东西不靠谱。

struct kd{
int ls,rs,sm[2],sn[2],v[2];
ll sum,s;
kd(){}
kd(int a,int b,int c){ls=rs=0,sm[0]=sn[0]=v[0]=a,sm[1]=sn[1]=v[1]=b,s=sum=c;}
}t[100001];
int n,m,D,root;
ll A,B,C;
bool cmp(co kd&a,co kd&b){
return a.v[D]<b.v[D];
}
void pushup(int x,int y){
for(int i=0;i<2;++i)
t[x].sm[i]=max(t[x].sm[i],t[y].sm[i]),t[x].sn[i]=min(t[x].sn[i],t[y].sn[i]);
t[x].sum+=t[y].sum;
}
int build(int l,int r,int d){
if(l>r) return 0;
int mid=(l+r)>>1;
D=d;
nth_element(t+l,t+mid,t+r+1,cmp);
t[mid].ls=build(l,mid-1,d^1),t[mid].rs=build(mid+1,r,d^1);
if(t[mid].ls) pushup(mid,t[mid].ls);
if(t[mid].rs) pushup(mid,t[mid].rs);
return mid;
}
int check(int x){
int re=0;
re+=A*t[x].sn[0]+B*t[x].sn[1]<C;
re+=A*t[x].sm[0]+B*t[x].sn[1]<C;
re+=A*t[x].sm[0]+B*t[x].sm[1]<C;
re+=A*t[x].sn[0]+B*t[x].sm[1]<C;
return re;
}
ll query(int x){
if(!x||!check(x)) return 0;
if(check(x)==4) return t[x].sum;
ll re=0;
if(A*t[x].v[0]+B*t[x].v[1]<C) re+=t[x].s;
re+=query(t[x].ls)+query(t[x].rs);
return re;
}
int main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
read(n),read(m);
int a,b,c;
for(int i=1;i<=n;++i){
read(a),read(b),read(c);
t[i]=kd(a,b,c);
}
root=build(1,n,0);
for(int i=1;i<=m;++i){
read(A),read(B),read(C);
printf("%lld\n",query(root));
}
return 0;
}

LG4475 巧克力王国的更多相关文章

  1. Bzoj2850 巧克力王国

    Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 505  Solved: 204 Description 巧克力王国里的巧克力都是由牛奶和可可做成的.但 ...

  2. BZOJ2820 - 巧克力王国

    原题链接 Description 给出个二维平面上的点,第个点为,权值为.接下来次询问,给出,求所有满足的点的权值和. Solution 对于这个点建一棵k-d树,子树维护一个子树和. 如果子树所代表 ...

  3. 洛谷 P4475 巧克力王国 解题报告

    P4475 巧克力王国 题目描述 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力. 对于每一块巧克力,我们设 \(x\) 和 \( ...

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

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

  5. bzoj 2850 巧克力王国

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

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

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

  7. 洛谷P4475 巧克力王国

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

  8. 【BZOJ2850】巧克力王国 KDtree

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

  9. BZOJ_2850_巧克力王国_KDTree

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

随机推荐

  1. Ubuntu下搭建Spark运行环境

    安装Spark的方式 现在有两种安装方式: 安裝spark notebook:已經把spark, scala, hadoop等等包起來了,裝好就能用GUI介面操作,適合測試用. 傳統方式安裝:慢慢裝s ...

  2. docker自建仓库Registry

    因为生产情况下官方容器还是比较慢的,所以会用到自建docker仓库.docker官方提供完整部署仓库的容器,你只需要提供域名证书,把文件系统挂载到容器,一个用户密码文件就可以使用基本的仓库功能了. 启 ...

  3. Nginx安装和使用

    Nginx简介 nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以按照轮询.ip哈希.URL哈希.权重等多种方式对后 ...

  4. 设计模式--桥梁模式C++实现

    1定义 将抽象和实现解耦,使得两者可以独立变化 2类图 3实现 #pragma once #include<iostream> using namespace std; class Imp ...

  5. H3C Huawei 交换机 IPv6环境配置

    # 使能IPv6报文转发功能. <Sysname> system-view [Sysname] ipv6 # 使能DHCPv6服务器功能. <Sysname> system-v ...

  6. IOS-OC 编码建议

    “神在细节之中” Objective-C 是 C 语言的扩展,增加了动态类型和面对对象的特性.它被设计成具有易读易用的,支持复杂的面向对象设计的编程语言.它是 Mac OS X 以及 iPhone 的 ...

  7. hapRroxy 安装配置详解

    简介 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要 ...

  8. Java内存状况查看方法和分析工具

    Java本身提供了多种丰富的方法和工具来帮助开发人员查看和分析GC及其JVM内存的状况,同时开源界也有一些工具用于查看和分析GC和JVM内存的状况. 通过这些分析,可以排查程序中内存泄露的问题及调优程 ...

  9. MYSQL-实现分组排序 对比 ORACLE 和SQLserver用 row_number() over(partition by ) 分组排序功能

    以下是个人笔记: 本文是为了理解 row_number() over(partition by )  和实现各种数据库的分组排序功能 select ROW_NUMBER()over( partitio ...

  10. html5 圆角ie8

    http://files.cnblogs.com/files/panmy/%E5%9C%86%E8%A7%92.rar