巧克力王国

Time Limit: 60 Sec  Memory Limit: 512 MB
Submit: 861  Solved: 325
[Submit][Status][Discuss]

Description

巧克力王国里的巧克力都是由牛奶和可可做成的。但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜
欢过于甜的巧克力。对于每一块巧克力,我们设x和y为其牛奶和可可的含量。由于每个人对于甜的程度都有自己的
评判标准,所以每个人都有两个参数a和b,分别为他自己为牛奶和可可定义的权重,因此牛奶和可可含量分别为x
和y的巧克力对于他的甜味程度即为ax + by。而每个人又有一个甜味限度c,所有甜味程度大于等于c的巧克力他都
无法接受。每块巧克力都有一个美味值h。现在我们想知道对于每个人,他所能接受的巧克力的美味值之和为多少

Input

第一行两个正整数n和m,分别表示巧克力个数和询问个数。接下来n行,每行三个整数x,y,h,含义如题目所示。再
接下来m行,每行三个整数a,b,c,含义如题目所示。

Output

输出m行,其中第i行表示第i个人所能接受的巧克力的美味值之和。

Sample Input

3 3
1 2 5
3 1 4
2 2 1
2 1 6
1 3 5
1 3 7

Sample Output

5
0
4

HINT

1 <= n, m <= 50000,1 <= 10^9,-10^9 <= a, b, x, y <= 10^9。

 
题解:
  这是一个二维平面问题,应该想到扫描线或者kdtree,
  但是发现对于扫描线,无法解决问题,因为限制是ax+by,所以对于每个询问是不一样的。
  所以是不行的,二kdtree是可以解决的,
  对于暴力只能够一个一个处理,如何一起处理是解决问题的关键,
  所以需要kdtree。
  时间复杂度,对于建树是T(n)=f(n)+aT(n/b)=O(n)+2T(n/2)
  所以得出复杂度是O(n log n)的
  然后对于询问是n^(1-1/k)是√n的,所以渐进复杂度是O(n√n)的。
 #include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<cstdio> #define ll long long
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch>''||ch<''){if (ch=='-') f=-;ch=getchar();}
while(ch<=''&&ch>=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
}
ll A,B,C,ans;
int F,n,m,rt;
struct Node
{
int d[],mx[],mn[],v,l,r;
ll sum;
int& operator[](int x)
{
return d[x];
}
friend bool operator<(Node x,Node y)
{
return x[F]<y[F];
}
}p[];
bool check(int x,int y)
{
return A*x+B*y<C;
}
int cal(Node x)
{
int tmp=;
tmp+=check(x.mn[],x.mn[]);
tmp+=check(x.mx[],x.mn[]);
tmp+=check(x.mn[],x.mx[]);
tmp+=check(x.mx[],x.mx[]);
return tmp;
}
struct kd
{
Node t[];
void update(int p)
{
int l=t[p].l,r=t[p].r;
for (int i=;i<;i++)
{
t[p].mn[i]=t[p].mx[i]=t[p][i];
if (l) t[p].mn[i]=min(t[p].mn[i],t[l].mn[i]);
if (r) t[p].mn[i]=min(t[p].mn[i],t[r].mn[i]);
if (l) t[p].mx[i]=max(t[p].mx[i],t[l].mx[i]);
if (r) t[p].mx[i]=max(t[p].mx[i],t[r].mx[i]);
}
t[p].sum=t[p].v+t[l].sum+t[r].sum;
}
int build(int l,int r,int now)
{
F=now;
int mid=(l+r)>>;
nth_element(p+l,p+mid,p+r+);
t[mid]=p[mid];
if (l<mid) t[mid].l=build(l,mid-,now^);
if (r>mid) t[mid].r=build(mid+,r,now^);
update(mid);
return mid;
}
void query(int p)
{
int l=t[p].l,r=t[p].r;
if (check(t[p][],t[p][]))ans+=t[p].v;
int tl=,tr=;
if (l) tl=cal(t[l]);
if (r) tr=cal(t[r]);
if (tl==) ans+=t[l].sum;
else if (tl) query(l);
if (tr==) ans+=t[r].sum;
else if (tr) query(r);
}
}kd;
int main()
{
n=read(),m=read();
for (int i=;i<=n;i++)
p[i][]=read(),p[i][]=read(),p[i].v=read();
rt=kd.build(,n,);
while(m--)
{
A=read(),B=read(),C=read();
ans=;
kd.query(rt);
printf("%lld\n",ans);
}
}
 

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

  1. [bzoj2850]巧克力王国_KD-Tree

    巧克力王国 bzoj-2850 题目大意:给出n块巧克力,每块巧克力都有自己的两个参数x和y和本身的价值val,询问:m个人,每个人有两个系数和一个限度a,b,和c.求所有ax+by<=c的巧克 ...

  2. Bzoj2850 巧克力王国

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

  3. 【kd-tree】bzoj2850 巧克力王国

    分四种情况讨论:a,b>=0 a,b<0 a>=0,b<0 a<0,b>=0 然后每次检验是否进入一个矩形框 或者 是否直接利用这个矩形框的答案 仅仅利用两个对角的 ...

  4. 【BZOJ2850】巧克力王国 KDtree

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

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

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

  6. BZOJ2820 - 巧克力王国

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

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

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

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

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

  9. bzoj 2850 巧克力王国

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

随机推荐

  1. 【2016新年版】年度精品 XP,32/64位Win7,32/64位Win8,32/64位Win10系统

    本系统是10月5日最新完整版本的Windows10 安装版镜像,win10正式版,更新了重要补丁,提升应用加载速度,微软和百度今天宣布达成合作,百度成为win10 Edge浏览器中国默认主页和搜索引擎 ...

  2. (十四)maven之启动tomcat

    前言:在网上找了好几种方法启动web项目.比较好用的是:①在Project Facets勾上Dynamic....,但是这个方法会改变项目结构(把WebContent的东西都弄出来了):②使用jett ...

  3. (二)maven之项目结构

    我们可以看一下Maven项目的大致结构:      项目结构: src/main/java:java源代码文件目录. src/main/resources:资源库,会自动赋值到classes目录里,像 ...

  4. debug1: expecting SSH2_MSG_KEX_ECDH_REPLY解决

    设置mtu ifconfig en1 mtu 1200 代理工具 退出lantern,退出shadowsocks

  5. java 正则表达式如何提取中文的问题

    String regex="([\u4e00-\u9fa5]+)"; String str="132更新至456"; Matcher matcher = Pat ...

  6. Java简答题附答案

    1. Java有没有goto? 有, Goto语句在java中作为保留字, 并没有实现它. 带标号的break, continue局限于循环体中跳转 带标号的goto可以在一个函数(c语言)中任意跳转 ...

  7. idea下使用码云插件进行git提交

    1)下载插件 file->setting->plugins->右侧搜索gitee->安装->重启ide 2)配置版本控制 file->setting->Ver ...

  8. Hibernate中get()与load()的区别,以及关于ThreadLocal的使用方法

    一.get方法和load方法的简易理解 (1)get()方法直接返回实体类,如果查不到数据则返回null.load()会返回一个实体代理对象(当前这个对象可以自动转化为实体对象),但当代理对象被调用时 ...

  9. shell脚本,如何监控目录下的文件内容是否被修改。

    第一种方法是通过cmp来进行比对[root@localhost bo]# ls .html .html .html .html .html .html .html .html .html cat.sh ...

  10. 低性能3张图片轮播React组件

    import React from 'react'; import {getSwipeWay} from '../utils/swipe'; class Carousel extends React. ...