【题解】P4475 巧克力王国
题目大意
巧克力王国里的巧克力都是由牛奶和可可做成的。但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力。
对于每一块巧克力,我们设 和 为其牛奶和可可的含量。由于每个人对于甜的程度都有自己的评判标准,所以每个人都有两个参数 和 ,分别为他自己为牛奶和可可定义的权重, 因此牛奶和可可含量分别为 和 的巧克力对于他的甜味程度即为 。而每个人又有一个甜味限度 ,所有甜味程度大于等于 的巧克力他都无法接受。每块巧克力都有一个美味值 。
现在我们想知道对于每个人,他所能接受的巧克力的美味值之和为多少。
题解
挺神秘的...
是有可以直接套kdt的做法,查询时如果子树所有点都满足限制直接返回答案。
但是这样只在随机情况下是对的... hack讨论以及正确做法
不太懂上面的神秘做法,有佬看懂了欢迎来找我battle,现在先咕咕咕。
下面代码是kdt的。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
inline int rd(){
int f=1,j=0;
char w=getchar();
while(!isdigit(w)){
if(w=='-')f=-1;
w=getchar();
}
while(isdigit(w)){
j=j*10+w-'0';
w=getchar();
}
return f*j;
}
const int N=5e5+50;
int n,now,m,rt;
ll a,b,c;
struct data
{
int d[2],mx[2],mn[2],lc,rc,val;
ll sum;
friend bool operator < (data a,data b)
{return a.d[now]<b.d[now];}
}dat[N],t[N];
void getmax(int&a,int b){if(a<b)a=b;}
void getmin(int&a,int b){if(a>b)a=b;}
void pushup(int x)
{
int lc=t[x].lc,rc=t[x].rc;
for(int i=0;i<2;i++)
{
t[x].mn[i]=t[x].mx[i]=t[x].d[i];
if(lc) getmin(t[x].mn[i],t[lc].mn[i]),
getmax(t[x].mx[i],t[lc].mx[i]);
if(rc) getmin(t[x].mn[i],t[rc].mn[i]),
getmax(t[x].mx[i],t[rc].mx[i]);
}
t[x].sum=t[lc].sum+t[rc].sum+t[x].val;
}
int build(int l,int r,int pl)
{
now=pl; int mid=(l+r)>>1;
nth_element(dat+l,dat+mid,dat+r+1);
t[mid]=dat[mid];
if(l<mid) t[mid].lc=build(l,mid-1,!pl);
if(r>mid) t[mid].rc=build(mid+1,r,!pl);
pushup(mid); return mid;
}
bool check(ll x,ll y) {return x*a+y*b<c;}
ll query(int x)
{
int tot=0;
tot+=check(t[x].mx[0],t[x].mx[1]);
tot+=check(t[x].mn[0],t[x].mx[1]);
tot+=check(t[x].mx[0],t[x].mn[1]);
tot+=check(t[x].mn[0],t[x].mn[1]);
if(tot==4) return t[x].sum;
if(tot==0) return 0;
ll res=0;
if(check(t[x].d[0],t[x].d[1])) res+=t[x].val;
if(t[x].lc) res+=query(t[x].lc);
if(t[x].rc) res+=query(t[x].rc);
return res;
}
int main()
{
n=rd(),m=rd();
for(int i=1;i<=n;i++)dat[i].d[0]=rd(),dat[i].d[1]=rd(),dat[i].val=rd();
rt=build(1,n,0); while(m--)
{
scanf("%lld%lld%lld",&a,&b,&c);
printf("%lld\n",query(rt));
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探