P4475 巧克力王国(KDTree)
传送门
首先可以把约束条件看成一条直线,然后每个巧克力看成一个点,求给定区域内的点权和
用KDTree,每次判断一下当前矩形是否整个都在里面或都在外面,是的话直接返回,否则的话递归
注意,必须该矩形四个顶点都在里面或外面才能判断
//minamoto
#include<bits/stdc++.h>
#define R register
#define ll long long
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
ll read(){R ll res,f=1;R char ch;while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');return res*f;
}
char sr[1<<21],z[20];int C=-1,Z=0;
inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}
void print(R ll x){if(C>1<<20)Ot();if(x<0)sr[++C]='-',x=-x;while(z[++Z]=x%10+48,x/=10);while(sr[++C]=z[Z],--Z);sr[++C]='\n';
}
const int N=50005;
struct node{int v[2],mn[2],mx[2],w,l,r;ll sum;}tr[N];
int n,m,K,rt,a,b;ll c;
inline bool operator <(const node &a,const node &b){return a.v[K]<b.v[K];}
void upd(int p){int l=tr[p].l,r=tr[p].r;fp(i,0,1){tr[p].mn[i]=tr[p].mx[i]=tr[p].v[i];if(l)cmin(tr[p].mn[i],tr[l].mn[i]),cmax(tr[p].mx[i],tr[l].mx[i]);if(r)cmin(tr[p].mn[i],tr[r].mn[i]),cmax(tr[p].mx[i],tr[r].mx[i]);}tr[p].sum=tr[l].sum+tr[r].sum+tr[p].w;
}
int build(int l,int r,int k){K=k;int mid=(l+r)>>1;nth_element(tr+l,tr+mid,tr+r+1);if(l<mid)tr[mid].l=build(l,mid-1,k^1);if(mid<r)tr[mid].r=build(mid+1,r,k^1);upd(mid);return mid;
}
inline bool in(int x,int y){return 1ll*a*x+1ll*b*y<c;}
ll query(int p){if(!p)return 0;if(in(tr[p].mx[0],tr[p].mx[1])&&in(tr[p].mn[0],tr[p].mn[1])&&in(tr[p].mn[0],tr[p].mx[1])&&in(tr[p].mx[0],tr[p].mn[1]))return tr[p].sum;ll res=0;if(!in(tr[p].mn[0],tr[p].mn[1])&&!in(tr[p].mx[0],tr[p].mx[1])&&!in(tr[p].mn[0],tr[p].mx[1])&&!in(tr[p].mx[0],tr[p].mn[1]))return 0;if(in(tr[p].v[0],tr[p].v[1]))res+=tr[p].w;res+=query(tr[p].l)+query(tr[p].r);return res;
}
int main(){
// freopen("testdata.in","r",stdin);n=read(),m=read();fp(i,1,n)tr[i].v[0]=read(),tr[i].v[1]=read(),tr[i].w=read();rt=build(1,n,0);while(m--)a=read(),b=read(),c=read(),print(query(rt));return Ot(),0;
}
转载于:https://www.cnblogs.com/bztMinamoto/p/10092240.html
P4475 巧克力王国(KDTree)相关推荐
- 洛谷 P4475 巧克力王国 解题报告
P4475 巧克力王国 题目描述 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力. 对于每一块巧克力,我们设 \(x\) 和 \( ...
- 【bzoj2850】巧克力王国 KD-tree
题目描述 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力.对于每一块巧克力,我们设x和y为其牛奶和可可的含量.由于每个人对于甜的程 ...
- [bzoj2850]巧克力王国_KD-Tree
巧克力王国 bzoj-2850 题目大意:给出n块巧克力,每块巧克力都有自己的两个参数x和y和本身的价值val,询问:m个人,每个人有两个系数和一个限度a,b,和c.求所有ax+by<=c的巧克 ...
- 巧克力王国 BZOJ 2850
巧克力王国 [问题描述] 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力.对于每一块巧克力,我们设x和y为其牛奶和可可的含量.由于 ...
- bzoj 2850 巧克力王国 —— K-D树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2850 只要暴力判断是否全选一个子树或全不选,如果都不是就进入查询: 要注意值有负,所以不是直 ...
- 省选+NOI 第五部分 高级数据结构
左偏树 [AgOHの数据结构]左偏树 [AgOHの数据结构]左偏树_哔哩哔哩_bilibili CSU-ICPC集训课程 启发式合并和左偏树 CSU-ICPC集训课程 启发式合并和左偏树_哔哩哔哩_b ...
- [学习笔记] 乱世之神杀疯了 —— K-D tree
文章目录 K-D tree 建树 合并 插入 删除 查询(估价函数) 旋转坐标系 题目练习 [SDOI2012]最近最远点对 [Violet]天使玩偶/SJY摆棋子 [CQOI2016]K远点对 [国 ...
- K-D Tree学习笔记
引入 K-D Tree 是一种处理高维空间的数据结构. 支持O(nk−1k)O(n^{\frac {k-1}k})O(nkk−1)查询给定超矩形内的点的信息, kkk 为维数. 可以用替罪羊树的思想 ...
- idea的英文是什么意思_德芙和多芬的英文都是Dove!“Dove”究竟是什么意思?
不知你有没有发现多芬和德芙的品牌都是"DOVE",那你知道为啥吗? 多芬:DOVE,就是指鸽子,是象征一种希望.快乐.和平以及所有积极事物的名字. 德芙:德芙巧克力包装上总是有&q ...
最新文章
- Python,Opencv cv2.Canny()边缘检测
- JavaWeb总结(九)
- javascript技巧及常用事件方法集合(全)
- 兄弟连区块链教程Fabric1.0源代码分析Peer peer根命令入口及加载子命令一
- 如何让Docker镜像飞起来
- inno setup读取XML文件
- jsp在ie6中css的margin属性失效问题
- poj 2406 Power Strings kmp基础
- 【转】数组指针指针数组
- win10 系统Docker搭建设备共享平台stf(一)
- html九宫格实现人像拼图游戏,实例分享jQuery+vue.js实现的九宫格拼图游戏
- sdk manger
- iOS提交应用至App Store流程
- 华为分析联运活动,助您提升游戏总体付费
- 发现电脑屏幕总是不自动关闭?看看你是否打开了这些程序……
- Linux:shell 脚本 自动解压压缩文件tar.gz到指定目录
- 解决富文本编辑器wangeditor 光标跳动的问题
- android支付安全机制,Android_指纹支付_安全问题_前后端交互逻辑
- oracle如何增加initial,Oracle修改表和索引的INITIAL初始化大小
- 对于Automatic Multi-Sensor Extrinsic Calibration for Mobile Robots的标定方案分析总结
热门文章
- 小程序 微信统计表格_微信小程序登录机制
- 并发控制常见手段-----乐观锁和悲观锁
- Python21天打卡Day11-dict和json格式互转
- python21天打卡Day6-元组
- 华为服务器报错信息,厂商 push 不通排查指南
- java应用中spring自动注入_Spring自动注入的几种方式
- c语言 mysql 查询数字_c语言mysql查询数据库
- a点到b点最短路线有多少条_8下数学培优:几何体上最短路径问题,总结与提升,不一样的感受...
- Latex中将多个eps图片合并成一幅eps的代码和方法
- Qt中SQL语句update同时更新多字段及设置字段值为空的方法