luogu

题意

平面上有\(n\)个点,每个点\((x_i,y_i)\),价值为\(w_i\)。\(m\)次询问,每次给出\(a_i,b_i,c_i\)求满足\(a_ix+b_iy<c_i\)的点的总价值。

\(n,m\le50000\)

sol

正解貌似是\(O(n^{1.5}\log n)\)?

我只会\(kdt\)qaq

直接暴力就行了,每到一个结点判断是否可以直接返回(交集为空),全部算上(完全包含与查询范围),算是剪枝吧。

code

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int gi(){
int x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=0,ch=getchar();
while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return w?x:-x;
}
#define ll long long
#define ls t[o].ch[0]
#define rs t[o].ch[1]
#define cmin(a,b) (a>b?a=b:a)
#define cmax(a,b) (a<b?a=b:a)
const int N = 5e4+5;
int n,m,D,root;ll ans;
struct node{
int d[2],key;
bool operator < (const node &b) const
{return d[D]<b.d[D];}
}a[N];
struct kdtree{int d[2],Min[2],Max[2],ch[2];ll sum;}t[N];
void mt(int x,int y){
cmin(t[x].Min[0],t[y].Min[0]);cmax(t[x].Max[0],t[y].Max[0]);
cmin(t[x].Min[1],t[y].Min[1]);cmax(t[x].Max[1],t[y].Max[1]);
t[x].sum+=t[y].sum;
}
int build(int l,int r,int d){
D=d;int o=l+r>>1;
nth_element(a+l,a+o,a+r+1);
t[o].d[0]=t[o].Min[0]=t[o].Max[0]=a[o].d[0];
t[o].d[1]=t[o].Min[1]=t[o].Max[1]=a[o].d[1];
t[o].sum=a[o].key;
if (l<o) ls=build(l,o-1,d^1),mt(o,ls);
if (o<r) rs=build(o+1,r,d^1),mt(o,rs);
return o;
}
inline bool empty(int o,int x,int y,int z){
if (1ll*t[o].Min[0]*x+1ll*t[o].Min[1]*y<z) return 0;
if (1ll*t[o].Min[0]*x+1ll*t[o].Max[1]*y<z) return 0;
if (1ll*t[o].Max[0]*x+1ll*t[o].Min[1]*y<z) return 0;
if (1ll*t[o].Max[0]*x+1ll*t[o].Max[1]*y<z) return 0;
return 1;
}
inline bool whole(int o,int x,int y,int z){
if (1ll*t[o].Min[0]*x+1ll*t[o].Min[1]*y>=z) return 0;
if (1ll*t[o].Min[0]*x+1ll*t[o].Max[1]*y>=z) return 0;
if (1ll*t[o].Max[0]*x+1ll*t[o].Min[1]*y>=z) return 0;
if (1ll*t[o].Max[0]*x+1ll*t[o].Max[1]*y>=z) return 0;
return 1;
}
inline bool in(int o,int x,int y,int z){
return 1ll*t[o].d[0]*x+1ll*t[o].d[1]*y<z;
}
void query(int o,int x,int y,int z){
if (empty(o,x,y,z)) return;
if (whole(o,x,y,z)) {ans+=t[o].sum;return;}
if (in(o,x,y,z)) ans+=a[o].key;
if (ls) query(ls,x,y,z);if (rs) query(rs,x,y,z);
}
int main(){
n=gi();m=gi();
for (int i=1;i<=n;++i) a[i]=(node){gi(),gi(),gi()};
root=build(1,n,0);
while (m--){
int x=gi(),y=gi(),z=gi();ans=0;
query(root,x,y,z);printf("%lld\n",ans);
}
return 0;
}

[Luogu4475]巧克力王国的更多相关文章

  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. LG4475 巧克力王国

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

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

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

  8. 洛谷P4475 巧克力王国

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

  9. 【BZOJ2850】巧克力王国 KDtree

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

随机推荐

  1. gh-ost测试

    gh-ost测试 1.不支持没有主键或者唯一索引的表 2018-08-24 09:53:33 FATAL No PRIMARY nor UNIQUE key found in table! Baili ...

  2. Shell 实现找出两个目录下的同名文件方法

    # 首先我们来创建一些 2 个目录,里面的目录结构及相关文件如下所示: # 从上面的测试目录可以看到, lol.txt lol2.txt 两个文件是两个目录下的同名文件 # 有实际例子,思路就容易出来 ...

  3. [算法] 将单链表的每K个节点之间逆序

    题目 给定一个单链表的头结点,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点. 解答 使用栈结构 import java.util.Stack; pu ...

  4. JAVA基础补漏--继承

    子类的对象在创建时,首先调用父类的构造函数,再调用子类自己的构造函数. 子类的构造函数中,有一个默认的super(),为一个无参调用,这个不显示,但会被首先调用,所有才会有父类构造函数被调用的情况. ...

  5. 用maven创建web工程

    1.打开eclipse,选择File->New->Other菜单,弹出下面的对话框,在Wizards中输入maven,会过滤出和maven相关的菜单,选中Maven Project菜单,然 ...

  6. Newtonsoft.Json 序列 反序列 IEnumerable

    下面是memcached 中获取的obj 类型的数据,转list string sessionId = Request.Cookies["sessionId"].Value;//授 ...

  7. windchill系统——开发_生命周期状态的增加

    步骤如下 ResourceBuild wt.lifecycle.StateRB ant -f codebase/MakeJar.xml 这样就可以了,下面是查看

  8. springboot处理session生命周期

    在使用springboot开发过程中发现用户登陆后60s后session就自动失效了,需要重新登陆,明明 application.yml  文件里已经配置了 server.session.timeou ...

  9. RabbitMQ 之 WorkQueues工作队列

    模型图 为什么会出现 work queues? 前提:使用 simple 队列的时候 (上一篇博客)我们应用程序在是使用消息系统的时候,一般生产者 P 生产消息是毫不费力的(发送消息即可),而消费者接 ...

  10. vue2 遇到的问题汇集ing

    1 .子路由 { path: '/order-list', //订单列表 name: "order-list", component(resolve) { require.ensu ...