当前位置: 首页 > news >正文

P4602 [CTSC2018] 混合果汁 题解

题目链接: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
}
http://www.jsqmd.com/news/1170123/

相关文章:

  • MiniMax 开放平台生成 API Key 适配 OpenClaw 本地模型调用部署步骤(含安装包)
  • Unity动态纹理绘制:InkPainter核心原理与性能优化实战
  • LR(0) 分析表构造实战:从文法到 DFA 的 5 步 Python 实现
  • ChatGPT内容日历失效的5个信号,第4个90%的人忽略——附诊断清单+3分钟修复SOP(含GPT-4o最新微调指令)
  • 2026年登封市翻译工作室哪个好,笔译/俄语笔译/意大利语笔译/英语笔译/德语翻译/越南语翻译,翻译中心哪家专业 - 品牌推荐师
  • 课程论文通宵赶工?2026年AI生成课程论文的实用测评对比
  • 18位高精度数据采集系统设计与实现
  • 3步解锁:让Xbox手柄在Mac上焕发新生
  • 2026年7月最新苏州积家官方售后客服中心地址电话及服务网点分布 - 积家官方售后服务中心
  • TMC7300与PIC18F2680组合实现高效直流电机控制
  • 国产 SM25QH256M 与 镁光 N25Q256A 对比:FPGA 配置兼容性测试与 2 个关键差异点
  • 虚幻引擎5 Nanite完整启用与优化指南:从原理到实战
  • 如何快速上手BiSheng-Adoptium JDK:5分钟完成安装与配置指南
  • Prompt Engineering——怎么让 AI 听懂你的话
  • 2026长春市单招培训班哪家好?本地机构全维度对比选购指南 - 爱说大实话121
  • OpenClaw 2.7.9 本地智能体完整部署教程,零代码实现电脑自动化办公
  • 2026年7月最新南京宝珀官方售后维修服务网点地址与客服电话 - 宝珀官方售后服务中心
  • ADP5350 PMIC与STM32F412RE的嵌入式电源管理方案
  • 核心期刊被拒3次后,我靠AI期刊论文生成工具逆袭成功
  • epkg-factory故障排除手册:解决常见问题的完整指南
  • 办公室用纸哪家好:联盛森宝口碑拔尖 - MXyuyu
  • 终极AI智能图像分层工具:3步将插画秒变可编辑PSD图层
  • 作为CTO第二次为公司换财务外包:我把5家供应商当ORM框架比了一遍
  • 幻兽帕鲁存档编辑指南:3步解锁游戏自定义体验
  • 2026年7月最新福州格拉苏蒂官方售后客户服务电话及线下网点地址 - 亨得利钟表维修中心
  • NFS v4.2 服务端配置详解:5个关键参数调优与 /etc/exports 实战案例
  • AT466总结
  • 不想花钱找人排版,有哪些靠谱免费论文格式排版工具值得收藏?
  • etipc核心功能解析:如何实现高效的多播通信增强
  • Flutter跨平台开发新瓶颈浮现:Cursor如何用AST级理解破解Dart泛型推导失效难题(附VS Code插件冲突解决方案)