p4475 巧克力王国
分析
我们多维护一个值,代表某个点子树中所有点的权值和
于是如果某个点它的min和max乘a(/b)的值小于范围则直接把整个子树都加进去
估价函数就是这个点的子树中的理论最小值
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define int long long
const int inf = 1e9;
inline int ra(){
int x=,f=;char s=getchar();
while(!isdigit(s)){if(s=='-')f=-;s=getchar();}
while(isdigit(s))x=(x<<)+(x<<)+(s-''),s=getchar();
return x*f;
}
struct kd {
int d[],mx[],mn[],le,ri,id,sum,val;
};
kd t[],now;
int n,m,root,wh,Ans;
inline bool operator < (kd a,kd b){
return a.d[wh]<b.d[wh];
}
inline void up(int rt){
for(int i=;i<;++i){
t[rt].mn[i]=min(t[rt].mn[i],min(t[t[rt].le].mn[i],t[t[rt].ri].mn[i]));
t[rt].mx[i]=max(t[rt].mx[i],max(t[t[rt].le].mx[i],t[t[rt].ri].mx[i]));
}
t[rt].sum=t[t[rt].le].sum+t[t[rt].ri].sum+t[rt].val;
}
inline void build(int &x,int le,int ri,int wwh){
wh=wwh;
int mid=(le+ri)>>;
x=mid;
nth_element(t+le,t+x,t+ri+);
for(int i=;i<;++i)
t[x].mn[i]=t[x].mx[i]=t[x].d[i];
if(le<x)build(t[x].le,le,mid-,wwh^);
if(ri>x)build(t[x].ri,mid+,ri,wwh^);
up(x);
}
inline int getd(kd a,kd b){
if(!a.id)return inf;
int res=;
for(int i=;i<;++i)res+=a.d[i]*b.d[i];
return res;
}
inline int calc(int x){
if(!x)return inf;
int res=;
for(int i=;i<;++i)
res+=min(t[x].mn[i]*now.d[i],t[x].mx[i]*now.d[i]);
return res;
}
inline int getmax(int x){
if(!x)return inf;
int res=;
for(int i=;i<;++i)
res+=max(t[x].mn[i]*now.d[i],t[x].mx[i]*now.d[i]);
return res;
}
inline void qurey(int x){
if(!x)return;
if(getmax(x)<now.val){
Ans+=t[x].sum;
return;
}
int dl=calc(t[x].le),dr=calc(t[x].ri),d=getd(t[x],now);
if(d<now.val)Ans+=t[x].val;
if(dl<now.val)qurey(t[x].le);
if(dr<now.val)qurey(t[x].ri);
}
signed main(){
int i,j,k;
t[].mn[]=t[].mn[]=inf;
t[].mx[]=t[].mx[]=-inf;
scanf("%lld%lld",&n,&m);
for(i=;i<=n;++i){
t[i].d[]=ra(),t[i].d[]=ra(),t[i].val=ra();
t[i].id=i;
}
build(root,,n,);
for(i=;i<=m;++i){
Ans=;
now.d[]=ra(),now.d[]=ra(),now.val=ra();
qurey(root);
printf("%lld\n",Ans);
}
return ;
}
p4475 巧克力王国的更多相关文章
- 洛谷 P4475 巧克力王国 解题报告
P4475 巧克力王国 题目描述 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力. 对于每一块巧克力,我们设 \(x\) 和 \( ...
- 洛谷P4475 巧克力王国
洛谷P4475 巧克力王国 题目描述 巧克力王国里的巧克力都是由牛奶和可可做成的. 但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力. 对于每一块巧克力,我们设 x 和 y 为 ...
- P4475 巧克力王国(KDTree)
传送门 首先可以把约束条件看成一条直线,然后每个巧克力看成一个点,求给定区域内的点权和 用KDTree,每次判断一下当前矩形是否整个都在里面或都在外面,是的话直接返回,否则的话递归 注意,必须该矩形四 ...
- P4475 巧克力王国 k-d tree
思路:\(k-d\ tree\) 提交:2次 错因:\(query\)时有一个\(mx\)误写成\(mn\)窝太菜了. 题解: 先把\(k-d\ tree\)建出来,然后查询时判一下整个矩形是否整体\ ...
- Bzoj2850 巧克力王国
Time Limit: 60 Sec Memory Limit: 512 MBSubmit: 505 Solved: 204 Description 巧克力王国里的巧克力都是由牛奶和可可做成的.但 ...
- BZOJ2820 - 巧克力王国
原题链接 Description 给出个二维平面上的点,第个点为,权值为.接下来次询问,给出,求所有满足的点的权值和. Solution 对于这个点建一棵k-d树,子树维护一个子树和. 如果子树所代表 ...
- 【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 为其牛奶和可可的含量.由于每个人对于 ...
随机推荐
- android视频处理相关资料
<开源>基于Android的点对点视频通信/RTSP/RTP/H.264 http://blog.csdn.net/cazicaquw/article/details/8650543 历经 ...
- java代码---charAt()和toCharry()的用法
总结:charAt()是返回字符型,把字符串拆分成某个字符,返回指定位置的字符.可以把字符串看成char型数组 package com.sads; ///输出一个大写英文字母的 public clas ...
- hadoop Shuffle Error OOM错误分析和解决
在执行Reduce Shuffle的过程中,偶尔会遇到Shuffle Error,但是重启任务之后,Shuffle Error会消失,当然这只是在某些特定情况下才会报出来的错误.虽然在每次执行很短的时 ...
- linux c下,从路径名中分离文件名
首先介绍一些查找字符的函数 1.strrchr 头文件:#include <string.h> strrchr() 函数用于查找某字符在字符串中最后一次出现的位置,其原型为: ch ...
- 关于v$BH
关于v$bh的相关字段值FILE# NUMBER Datafile identifier number (to find the filename, query DBA_DATA_FILES or V ...
- 关于v9缓存的那点事
当做好以后模块后,由于是模块原型性能不佳,故而可以用缓存方式来提升效率.缓存生成可以是模块的一个方法或者一个函数,phpcms的缓存也可以分为不同的类型,比如file,memcache.如果是file ...
- Julia - 浮点型
浮点数类型: Float64 类型,双精度,64 位 Float32 类型,单精度,32 位 Float16 类型,半精度,16 位 julia> 5.0 5.0 julia> 5. 5. ...
- cocos2dx中快速完成一段可播放动画
版本:cocos2dx 2.2.6 IDE: VS2012 语言:C++98 CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteF ...
- http请求头设置
Curl curl -i -H 'Content-Type: application/json' -i/--include 输出时包括protocol头信息curl -x 10.12.15.1 ...
- OpenLayers 3 之 地图视图(View)
OpenLayers 3 之 地图视图(View) 初始化一幅地图,必备的三要素之一视图(view),这个对象主要是控制地图与人的交互,如进行缩放,调节分辨率.地图的旋转等控制.也就是说每个 map对 ...