尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

P4602 [CTSC2018] 混合果汁 题解

P4602 [CTSC2018] 混合果汁 题解
📅 发布时间:2026/7/11 22:40:53

题目链接:P4602 [CTSC2018] 混合果汁

较为简单的一题,模拟赛场切了,不考虑整体二分这个知识点的难度可能是下位蓝

考虑整体二分,按照 $ d_i $ 排序,然后每次处理只有右区间的果汁,先把小朋友按照 $ L_j $ 排序,然后把右区间的果汁按照 $ p_i $ 排序,双指针即可。

然后这显然是错的,因为没有考虑到可能是左区间的右区间,因此还要加上前面层如果是左区间 右区间的值,考虑开一棵权值线段树,位置 $ i $ 存价格为 $ i $ 的果汁的升数之和,然后查询时即查询对于 $ L_j $ 升需要的最少钱数是多少,直接线段树上二分即可,上面处理右区间的流程也可以简化到这里面。

代码:

#include<bits/stdc++.h>
#define time(null) chrono::steady_clock::now().time_since_epoch().count()
#define int long long
#define uint unsigned long long
#define debug() cout<<"come here\n"
#define INF 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
#define pb push_back
#define Code return
#define by 0
#define MCYYDS ;
using namespace std;
int qpow(int a,int b,int p=INF){int ret=1;while(b){if(b&1)ret=(ret*a)%p;a=(a*a)%p;b>>=1;}return ret;}
inline int read(){int ret=0,f=1;char ch=getchar();while(ch<'0'||ch>'9')f=(ch=='-'?-1:f),ch=getchar();while(ch>='0'&&ch<='9')ret=(ret<<3)+(ret<<1)+(ch^48),ch=getchar();return ret*f;}
inline void write(int x){if(x<0){putchar('-');write(-x);return ;}if(x>9)write(x/10);putchar((char)(x%10+48));}
inline void writech(int x,char ch){write(x);putchar(ch);}
struct node{int d,p,l;
};
struct ask{int g,l,id;
};
bool cmpb(ask x,ask y)
{return x.l<y.l;
}
bool cmp(node x,node y)
{return x.d<y.d;
}
bool cmpa(node x,node y)
{return x.p<y.p;
}
vector<int> ans;
struct tree{int l,r,cnt,sum;
}tree[400005];
void update(int l,int r,int id,int p,int v)
{if(l==r){tree[id].cnt+=v;tree[id].sum+=v*p;return ;}int mid=l+r>>1;if(p<=mid)update(l,mid,id<<1,p,v);else update(mid+1,r,id<<1|1,p,v);tree[id].cnt=tree[id<<1].cnt+tree[id<<1|1].cnt;tree[id].sum=tree[id<<1].sum+tree[id<<1|1].sum;return ;
}
int query(int l,int r,int id,int x)
{if(l==r)return l*x;int mid=l+r>>1;if(tree[id<<1].cnt>=x)return query(l,mid,id<<1,x);return tree[id<<1].sum+query(mid+1,r,id<<1|1,x-tree[id<<1].cnt);
}
void dfs(int l,int r,vector<node> a,vector<ask> b)
{if(l==r){for(auto x:b){ans[x.id]=a[0].d;}return ; }int mid=l+r>>1;sort(a.begin(),a.end(),cmp);vector<node> al,ar;for(int i=l;i<=mid;i++){al.pb(a[i-l]);}for(int i=mid+1;i<=r;i++){ar.pb(a[i-l]);}sort(ar.begin(),ar.end(),cmpa);vector<ask> bl,br;for(auto x:ar){
//		cout<<x.p<<' '<<x.l<<'\n';update(1,100000,1,x.p,x.l);}for(auto x:b){
//		cout<<x.l<<' '<<x.g<<' '<<l<<' '<<r<<' '<<query(1,100000,1,x.l)<<'\n';if(tree[1].cnt>=x.l&&query(1,100000,1,x.l)<=x.g)br.pb(x);else bl.pb(x);}dfs(l,mid,al,bl);for(auto x:ar){update(1,100000,1,x.p,-x.l);}dfs(mid+1,r,ar,br);
}
signed main()
{
//	ios::sync_with_stdio(0);
//	cin.tie(0);
//	cout.tie(0);int n=read(),m=read();vector<node> a(n+1);ans.assign(m,-1);a[0].d=-1;a[0].p=0;a[0].l=INF;for(int i=1;i<=n;i++){a[i].d=read();a[i].p=read();a[i].l=read();}vector<ask> b(m);for(int i=0;i<m;i++){b[i].g=read(),b[i].l=read();b[i].id=i;}sort(b.begin(),b.end(),cmpb);dfs(0,n,a,b);for(auto x:ans){writech(x,'\n');}Code by MCYYDS
}

相关新闻

  • 2026年7月最新苏州积家官方售后客服中心地址电话及服务网点分布 - 积家官方售后服务中心
  • 2026长春市单招培训班哪家好?本地机构全维度对比选购指南 - 爱说大实话121
  • 2026年7月最新南京宝珀官方售后维修服务网点地址与客服电话 - 宝珀官方售后服务中心

最新新闻

  • 为什么你的Claude SEO文章排名停滞不前?谷歌搜索质量评估员亲授的4类隐性内容缺陷识别法
  • 工业信号隔离与抗干扰设计:FOD4216与MKV44F64VLH16应用
  • openEuler/Java-Packages门禁检查全解析:确保PR质量的关键步骤
  • Git 从入门到进阶:一篇吃透版本管理的实战指南
  • Unity缓动函数可视化库:从数学公式到流畅动画的工程实践
  • ChatGPT响应慢到崩溃?5步精准定位卡顿根源:从API调用链、Token流控到模型路由层全栈诊断

日新闻

  • OpenClaw本地部署:一键直连微信的私有化AI Agent实战指南
  • Kubernetes 系列【10】控制器:ReplicaSet(副本集)
  • 怎么寄快递才能便宜呢?2026年7月寄快递省钱攻略 - 生活情报姬

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号