P4475 巧克力王国

题目描述

巧克力王国里的巧克力都是由牛奶和可可做成的。但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力。

对于每一块巧克力,我们设 \(x\) 和 \(y\) 为其牛奶和可可的含量。由于每个人对于甜的程度都有自己的评判标准,所以每个人都有两个参数 \(a\) 和 \(b\) ,分别为他自己为牛奶和可可定义的权重, 因此牛奶和可可含量分别为 \(x\) 和 \(y\) 的巧克力对于他的甜味程度即为 \(ax+by\)。而每个人又有一个甜味限度 \(c\) ,所有甜味程度大于等于 \(c\) 的巧克力他都无法接受。每块巧克力都有一个美味值 \(h\) 。

现在我们想知道对于每个人,他所能接受的巧克力的美味值之和为多少。

输入输出格式

输入格式:

第一行两个正整数 \(n\) 和 \(m\) ,分别表示巧克力个数和询问个数。

接下来\(n\)行,每行三个整数 \(x , y , h\) ,含义如题目所示。

再接下来 \(m\) 行,每行三个整数 \(a , b , c\) ,含义如题目所示。

输出格式:

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

说明

对于\(100\%\)的数据,\(1\le n,m\le 50000,-10^9\le a_i,b_i,x_i,y_i\le 10^9\)。


kdtree 搞一下就行了,没有插入就不需要重构

然后复杂度是为什么呢(


Code:

#include <cstdio>
#include <algorithm>
#include <cctype>
#define ll long long
const int N=5e4+10;
const int K=2;
const ll inf=1ll<<45;
int read()
{
int x=0,f=1;char c=getchar();
while(!isdigit(c)) f=c=='-'?0:1,c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return f?x:-x;
}
#define ls ch[now][0]
#define rs ch[now][1]
int ch[N][2],L[N][2],R[N][2],p[N][2],val[N],s[N];
ll sum[N],a,b,c;
int n,m,nk,root;
void ckmin(ll &mi,ll yuy){mi=mi<yuy?mi:yuy;}
void ckmax(ll &mx,ll yuy){mx=mx>yuy?mx:yuy;}
using std::min;
using std::max;
void updata(int now)
{
sum[now]=sum[ls]+sum[rs]+val[now];
for(int i=0;i<K;i++)
{
L[now][i]=R[now][i]=p[now][i];
if(ls) L[now][i]=min(L[now][i],L[ls][i]),R[now][i]=max(R[now][i],R[ls][i]);
if(rs) L[now][i]=min(L[now][i],L[rs][i]),R[now][i]=max(R[now][i],R[rs][i]);
}
}
bool cmp(int a,int b){return p[a][nk]<p[b][nk];}
void build(int &now,int l,int r,int k)
{
if(l>r) return;
int mid=l+r>>1;nk=k;
std::nth_element(s+l,s+mid,s+r+1,cmp);
now=s[mid];
build(ls,l,mid-1,k^1),build(rs,mid+1,r,k^1);
updata(now);
}
void get(int now,ll &mi,ll &mx)
{
ll bee=a*L[now][0]+b*L[now][1];
ckmin(mi,bee),ckmax(mx,bee);
bee=a*L[now][0]+b*R[now][1];
ckmin(mi,bee),ckmax(mx,bee);
bee=a*R[now][0]+b*L[now][1];
ckmin(mi,bee),ckmax(mx,bee);
bee=a*R[now][0]+b*R[now][1];
ckmin(mi,bee),ckmax(mx,bee);
}
ll query(int now)
{
if(!now) return 0;
ll mi=inf,mx=-inf;
get(now,mi,mx);
if(mx<c) return sum[now];
if(mi>=c) return 0;
return (a*p[now][0]+b*p[now][1]<c?val[now]:0)+query(ls)+query(rs);
}
int main()
{
n=read(),m=read();
for(int i=1;i<=n;i++)
{
p[i][0]=read(),p[i][1]=read(),sum[i]=val[i]=read();
s[i]=i;
}
build(root,1,n,0);
for(int i=1;i<=m;i++)
{
a=read(),b=read(),c=read();
printf("%lld\n",query(root));
}
return 0;
}

2019.2.5

洛谷 P4475 巧克力王国 解题报告的更多相关文章

  1. 洛谷P4475 巧克力王国

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

  2. 洛谷 P1783 海滩防御 解题报告

    P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...

  3. 洛谷 P4597 序列sequence 解题报告

    P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...

  4. 洛谷1087 FBI树 解题报告

    洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...

  5. 洛谷 P3349 [ZJOI2016]小星星 解题报告

    P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...

  6. 洛谷 P2375 [NOI2014]动物园 解题报告

    P2375 [NOI2014]动物园 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定 ...

  7. 洛谷4475 巧克力王国(KD-Tree + 维护子树和)

    (嘤嘤嘤 又是一个自闭了一晚上的题) qwq果然不是平面上的点的问题,也可以直接用KDTree打暴力 我们对于巧克力直接建kdtree 维护一个\(mx[i],mn[i]\) 但是有一个非常不友好的事 ...

  8. 洛谷 P3177 树上染色 解题报告

    P3177 [HAOI2015]树上染色 题目描述 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0\) ~ \(N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色, ...

  9. 洛谷 P4705 玩游戏 解题报告

    P4705 玩游戏 题意:给长为\(n\)的\(\{a_i\}\)和长为\(m\)的\(\{b_i\}\),设 \[ f(x)=\sum_{k\ge 0}\sum_{i=1}^n\sum_{j=1}^ ...

随机推荐

  1. 设计模式-简单工厂Coding+jdk源码解析

    感谢慕课geely老师的设计模式课程,本套设计模式的所有内容均以课程为参考. 前面的软件设计七大原则,目前只有理论这块,因为最近参与项目重构,暂时没有时间把Coding的代码按照设计思路一点点写出来. ...

  2. 认识Python&基础环境搭建

    前言 作为.NET Coder可能.NET Core是现阶段首要学习方向,但是说实在的对Core真的不感冒. 原因有几点: 1.公司项目底层需要的一部分库,Core还不支持. 2.同样的需求,.NET ...

  3. go陷阱

    必看的题目:https://blog.csdn.net/weiyuefei/article/details/77963810 1.关于值传递.引用传递与指针传递 当一个变量或者新值被创建时, 如果没有 ...

  4. Jmeter(三十五)_精确实现网页爬虫

    Jmeter实现了一个网站文章的爬虫,可以把所有文章分类保存到本地文件中,并以文章标题命名 它原理就是对网页提交一个请求,然后把返回的所有值提取出来,利用ForEach控制器去实现遍历.下面来介绍一下 ...

  5. list 的 增 删

    增: 1. name = [] 2. name.append() 3. name.extend(name2) name2为可迭代的 name + name2 与之效果一样,合并为一个列表 4. nam ...

  6. bootstrap是什么

    Bootstrap,来自 Twitter,是目前最受欢迎的前端框架. Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. 本教程将向您讲解 ...

  7. 作业1+2.四则运算(改进后完整版,用python写的)_064121陶源

    概述: 用一个星期加上五一的三天假期自学了python,在Mac系统上重新写出了四则运算的程序,编译器是PyCharm,相当于完成了作业2.d)"选一个你从来没有学过的编程语言,试一试实现基 ...

  8. 广商博客沖刺第一天(new ver):

    項目名稱:廣商博客 沖刺二天傳送門 此次Sprint的目标:全部sprint任務完成 时间:1星期左右 每日立会 Daily Standup Meeting: 1#A3008 晚上8点开始,大概1小时 ...

  9. BUAA软工个人作业Week3-案例分析

    一. 调研评测 评测项目:为了联系移动和PC版,我同时下载了必应词典的Android版本和UWP版本,选择UWP的原因是想看看微软推广的UWP在微软自己的应用上的效果.当然主要是对安卓的测评(UWP用 ...

  10. Laravel自定义 封装便捷返回Json数据格式引用

    一般返回数据格式 return response()->json(['status' => 'success','code' => 200,'message' => '关注成功 ...