传送门

首先可以把约束条件看成一条直线,然后每个巧克力看成一个点,求给定区域内的点权和
用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)相关推荐

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

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

  2. 【bzoj2850】巧克力王国 KD-tree

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

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

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

  4. 巧克力王国 BZOJ 2850

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

  5. bzoj 2850 巧克力王国 —— K-D树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2850 只要暴力判断是否全选一个子树或全不选,如果都不是就进入查询: 要注意值有负,所以不是直 ...

  6. 省选+NOI 第五部分 高级数据结构

    左偏树 [AgOHの数据结构]左偏树 [AgOHの数据结构]左偏树_哔哩哔哩_bilibili CSU-ICPC集训课程 启发式合并和左偏树 CSU-ICPC集训课程 启发式合并和左偏树_哔哩哔哩_b ...

  7. [学习笔记] 乱世之神杀疯了 —— K-D tree

    文章目录 K-D tree 建树 合并 插入 删除 查询(估价函数) 旋转坐标系 题目练习 [SDOI2012]最近最远点对 [Violet]天使玩偶/SJY摆棋子 [CQOI2016]K远点对 [国 ...

  8. K-D Tree学习笔记

    引入 K-D Tree 是一种处理高维空间的数据结构. 支持O(nk−1k)O(n^{\frac {k-1}k})O(nkk−1​)查询给定超矩形内的点的信息, kkk 为维数. 可以用替罪羊树的思想 ...

  9. idea的英文是什么意思_德芙和多芬的英文都是Dove!“Dove”究竟是什么意思?

    不知你有没有发现多芬和德芙的品牌都是"DOVE",那你知道为啥吗? 多芬:DOVE,就是指鸽子,是象征一种希望.快乐.和平以及所有积极事物的名字. 德芙:德芙巧克力包装上总是有&q ...

最新文章

  1. Python,Opencv cv2.Canny()边缘检测
  2. JavaWeb总结(九)
  3. javascript技巧及常用事件方法集合(全)
  4. 兄弟连区块链教程Fabric1.0源代码分析Peer peer根命令入口及加载子命令一
  5. 如何让Docker镜像飞起来
  6. inno setup读取XML文件
  7. jsp在ie6中css的margin属性失效问题
  8. poj 2406 Power Strings kmp基础
  9. 【转】数组指针指针数组
  10. win10 系统Docker搭建设备共享平台stf(一)
  11. html九宫格实现人像拼图游戏,实例分享jQuery+vue.js实现的九宫格拼图游戏
  12. sdk manger
  13. iOS提交应用至App Store流程
  14. 华为分析联运活动,助您提升游戏总体付费
  15. 发现电脑屏幕总是不自动关闭?看看你是否打开了这些程序……
  16. Linux:shell 脚本 自动解压压缩文件tar.gz到指定目录
  17. 解决富文本编辑器wangeditor 光标跳动的问题
  18. android支付安全机制,Android_指纹支付_安全问题_前后端交互逻辑
  19. oracle如何增加initial,Oracle修改表和索引的INITIAL初始化大小
  20. 对于Automatic Multi-Sensor Extrinsic Calibration for Mobile Robots的标定方案分析总结

热门文章

  1. 小程序 微信统计表格_微信小程序登录机制
  2. 并发控制常见手段-----乐观锁和悲观锁
  3. Python21天打卡Day11-dict和json格式互转
  4. python21天打卡Day6-元组
  5. 华为服务器报错信息,厂商 push 不通排查指南
  6. java应用中spring自动注入_Spring自动注入的几种方式
  7. c语言 mysql 查询数字_c语言mysql查询数据库
  8. a点到b点最短路线有多少条_8下数学培优:几何体上最短路径问题,总结与提升,不一样的感受...
  9. Latex中将多个eps图片合并成一幅eps的代码和方法
  10. Qt中SQL语句update同时更新多字段及设置字段值为空的方法