AT_joisc2021_c フードコート (Foodcourt)

news/2025/10/16 16:43:40/文章来源:https://www.cnblogs.com/UesugiErii-/p/19146037

换维扫描线好题。

发现删除操作会出现过删(即删除的个数大于序列中元素数),这个很难处理。

思考一下应该能想到将每次询问查询的 \(b\to cnt_{del}+b\) 其中 \(cnt_{del}\) 为在该询问之前这个序列删除的数的个数,这样就不用删除只需插入即可。但是这样对于每个删除操作操作的每个序列都要求出删了多少个数,很困难,时间复杂度不能接受。

对于一个询问 \((A,B)\) 发现如果能找到序列 \(A\) 在此询问之前操作序列中最后一次出现过删的操作,对于该位置后的操作序列对 \(B\) 的贡献就可以用上文的方法求,而该操作及之前加入的所有元素都已经清空,只需将 \(b\to cnt_{add}\) 即可,这里的 \(cnt_{add}\) 表示该操作前加入的元素个数和。

扫描线。以序列编号为做扫描线,以操作编号建立线段树,叶子节点 \([i,i]\) 上维护第 \(1\) 到第 \(i\) 次操作的过程中共加的元素总数(不计删除)记为 \(add_i\) 以及经过 \(1\)\(i\) 操作加的元素总数减去删除的元素总数记为 \(sum_i\)(不考虑过删),节点 \([l,r]\) 维护 \(\max_{i=l}^{r}add_i,\min_{i=l}^{r}sum_i\)

下文区间 \([l,r]\) 某值记为 \(f(l,r)\)\(f(i,i)\) 简记为 \(f(i)\)

将修改 \((l,r,c,k)\) 拆分成在第 \(l\) 个序列将 \([id,q]\) 区间加 \(k\),在第 \(r+1\) 个序列将 \([id,q]\) 区间加 \(-k\),其中 \(id\) 为这个操作是操作序列中第几个操作,\(q\) 是总操作数(均不计询问)。

假设当前询问操作前进行了 \(x\) 次操作,线段树上二分出 \([1,x]\) 中最后一个 \(sum\) 等于 \(\min_{i=l}^{r} sum\) 的位置,就是上文最后一次出现过删的操作(因为对于 \(i<j,sum_j>sum_i\) 则第 \(i\) 次操作到第 \(j\) 次操作的变化量 \(<0\) 即删除数大于加入数,出现过删),记为 \(p\)。假设询问 \((A,B)\) 前有 \(m\) 此操作,在线段树上二分出 \([p,m]\) 中第一个 \(add\) 大于等于 \(add(m)-sum(m)+sum(p)+B\) 的位置,记为 \(p_1\)。上述值即为第二段中贡献 \(B\) 的值 \(add(m)-sum(m)+sum(p)=del(m)+sum(p)=add(p)+del(p+1,m)\),其中 \(del\) 是删除的元素个数。则第 \(p_1\) 次操作加入元素即为答案。

时间复杂度 \(O(n\log n)\)

// Problem: フードコート (Foodcourt)
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/AT_joisc2021_c
// Memory Limit: 512 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include<bits/stdc++.h>
using namespace std;
#define int long long
#define mp make_pair
const int N=3e5+5;int num[N],ans[N];
struct oper{int opt,id,k,c;};vector<oper>g[N],a[N];
struct node{int l,r,add,sum,la,ls;}tr[N<<2];
void pushup(int u){tr[u].add=max(tr[u<<1].add,tr[u<<1|1].add),tr[u].sum=min(tr[u<<1].sum,tr[u<<1|1].sum);}
void pd(int u){if(tr[u].ls)tr[u<<1].ls+=tr[u].ls,tr[u<<1|1].ls+=tr[u].ls,tr[u<<1].sum+=tr[u].ls,tr[u<<1|1].sum+=tr[u].ls,tr[u].ls=0;if(tr[u].la)tr[u<<1].la+=tr[u].la,tr[u<<1|1].la+=tr[u].la,tr[u<<1].add+=tr[u].la,tr[u<<1|1].add+=tr[u].la,tr[u].la=0;
}
void build(int u,int l,int r){tr[u]={l,r};if(l==r)return;int mid=l+r>>1;build(u<<1,l,mid),build(u<<1|1,mid+1,r);}
void add(int u,int l,int r,int d){if(tr[u].l>=l&&tr[u].r<=r)return tr[u].add+=d,tr[u].la+=d,void();pd(u);int mid=tr[u].l+tr[u].r>>1;if(l<=mid)add(u<<1,l,r,d);if(r>mid)add(u<<1|1,l,r,d);pushup(u);
}
void adds(int u,int l,int r,int d){if(tr[u].l>=l&&tr[u].r<=r)return tr[u].sum+=d,tr[u].ls+=d,void();pd(u);int mid=tr[u].l+tr[u].r>>1;if(l<=mid)adds(u<<1,l,r,d);if(r>mid)adds(u<<1|1,l,r,d);pushup(u);
}
int gtad(int u,int x){if(tr[u].l==tr[u].r)return tr[u].add;pd(u);int mid=tr[u].l+tr[u].r>>1;return (x<=mid?gtad(u<<1,x):gtad(u<<1|1,x));
}
int gtsum(int u,int l,int r){if(!l&&!r)return 0;if(tr[u].l>=l&&tr[u].r<=r)return tr[u].sum;pd(u);int mid=tr[u].l+tr[u].r>>1,mn=1e16;if(l<=mid)mn=min(mn,gtsum(u<<1,l,r));if(r>mid)mn=min(mn,gtsum(u<<1|1,l,r));return mn;
}
int askad(int u,int l,int r,int d){if(tr[u].add<d||tr[u].l>r||tr[u].r<l)return 0;if(tr[u].l==tr[u].r)return tr[u].l;pd(u);int w=askad(u<<1,l,r,d);return (w?w:askad(u<<1|1,l,r,d));
}
int asksum(int u,int l,int r,int d){if(tr[u].sum>d||tr[u].l>r||tr[u].r<l)return 0;if(tr[u].l==tr[u].r)return tr[u].l;pd(u);int w=asksum(u<<1|1,l,r,d);return (w?w:asksum(u<<1,l,r,d));
}
signed main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n,m,q,c0=0,c1=0;cin>>n>>m>>q;for(int i=1,opt,l,r,c,k;i<=q;i++){cin>>opt>>l>>r;if(opt==1)cin>>num[++c0]>>k,g[l].push_back(oper{1,c0,k}),g[r+1].push_back(oper{1,c0,-k});else if(opt==2)++c0,cin>>k,g[l].push_back(oper{2,c0,-k}),g[r+1].push_back(oper{2,c0,k});else a[l].push_back(oper{3,++c1,c0,r});}build(1,1,c0);for(int i=1;i<=n;i++){for(oper j:g[i]){if(j.opt==1)add(1,j.id,c0,j.k);adds(1,j.id,c0,j.k);}for(oper j:a[i]){int mn=gtsum(1,1,j.k);int beg=(mn<0?asksum(1,1,j.k,mn):0);ans[j.id]=num[askad(1,beg+1,j.k,gtad(1,j.k)-gtsum(1,j.k,j.k)+gtsum(1,beg,beg)+j.c)];}}for(int i=1;i<=c1;i++)cout<<ans[i]<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/938352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SPP question regarding Issues Due To Gaming Spoofers

Checking SPP Registry Key [Incorrect ModuleId Found]在windows下遇到该问题时,或许可以考虑导入如下的注册表文件。 下载 SPP ref: Issues Due To Gaming Spoofers

类型安全ORM的高并发场景解决方案 - 实践

类型安全ORM的高并发场景解决方案 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

L06_mybatis读取MySQL数据库(懵逼版)

由于上课完全听不懂,又不会java,经过三天折磨,查阅各种网站,总算解决了,一个,,,,,小小小小作业。 1.创建一个项目,如果IDEA为2024版,左上角File-》new-》Project按照上面图片配置就好了。 2.需要加载的依赖…

提供给第三方接口的验证方法

第三方调用(认证方式时效限制5分钟)该 postman 调用 url 为样例 url请求头: AuthorizationBasicMTIzOmRjOTg0ZDY4NzJjNWZkYWFkZDllZDg4ZGE5ZmU5ZDYwZDc40TkxMzA0NWFmNjhkMjNiMzE4NzUzZTRhYTIWMDU= 请求头: Timestamp20…

【2025最新】6款免费DLL修复工具推荐:彻底解决“XXX.dll缺失”问题!

系统频繁弹出“XXX.dll缺失”提示?本文汇总6款2025年最新免费DLL修复工具,包括金山毒霸电脑医生、迅捷DLL助手、360安全卫士等,一键扫描自动修复系统缺失DLL,支持Win7/10/11,让你的电脑秒恢复稳定运行。电脑运行时…

2025 年注浆管生产厂家最新推荐排行榜:聚焦 0.3mm 精度与国企合作案例,助力基建企业精准挑选优质供应商

在基建工程中,注浆管是保障防渗加固、隧道支护等环节安全的关键材料,其质量直接决定工程使用寿命与施工安全。当前市场上,部分厂家为压缩成本,选用低强度钢材、忽视品控,导致管材抗压不足、壁厚不均,频繁出现破裂…

vue 下拉框 vxe-select 实现人员选择下拉列表

vue 下拉框 vxe-select 实现人员选择下拉列表 使用自定义选项插槽的方式,可以灵活的实现各种类型的下拉选择 官网:https://vxeui.com github:https://github.com/x-extends/vxe-pc-ui gitee:https://gitee.com/x-e…

双核A53+开源生态,ZX7981P Wi-Fi6 5G插卡路由器开发板CPE内核新选择!

双核A53+开源生态,ZX7981P Wi-Fi6 5G插卡路由器开发板CPE内核新选择!在物联网技术飞速发展的今天,一款出色的开发平台能够极大加速产品研发进程。启明智显推出的ZX7981P Wi-Fi6 5G插卡路由器开发板,正是为高效开发…

2025 高效过滤器制造企业最新推荐榜:供货商定制方案深度解析及口碑评级

在环保水处理与空气净化行业升级提速的背景下,精密过滤器的定制适配性直接决定项目达标效率与运营成本。当前市场呈现 “两极分化” 态势:老牌企业虽经验丰富,但部分定制方案创新不足;新兴品牌虽灵活度高,却因缺乏…

最后防线 解题报告

简要题意 给定一棵 \(n\) 个节点的有根树,每个点有点权 \(a\)。求出一个访问顺序,使得所有点都在其祖先之后被访问,设第 \(i\) 个节点是第 \(p_i\) 个被访问到的,最小化 \(\sum \limits_{1\ le i \le n}p_ia_i\)。…

2025 年试验箱厂家 TOP 企业品牌推荐排行榜,氙灯老化 / 紫外老化 / 冷热冲击 / 恒温恒湿 / 高低温 / 快速温变 / 盐水喷雾 / 高温老化 / 砂尘 / 淋雨试验箱公司推荐!

2025 年试验箱厂家 TOP 企业品牌推荐排行榜,氙灯老化 / 紫外老化 / 冷热冲击 / 恒温恒湿 / 高低温 / 快速温变 / 盐水喷雾 / 高温老化 / 砂尘 / 淋雨试验箱公司推荐!引言在现代工业生产与科研活动中,试验箱作为模拟…

系统修复

cmd中文显示异常:chcp 936 (临时方法)打开控制面板--时钟和区域--区域--管理--更改系统区域设置-当前系统区域设置为中文(简体中国) 查看上一次是什么应用程序唤醒了电脑可以以管理员模式启动命令提示符(CMD),…

什么是vibe ?

这里的 “vibe” 不是指普通的 “氛围”,而是结合 AI 工作场景的一种直观感受,核心是AI 自主、流畅执行任务的 “状态感” 或 “体验感”。 它之所以用 “vibe” 这个偏感性的词,是为了突出和传统方式的差异,具体可…

2025年10月试验箱厂家最新推荐排行榜:氙灯老化试验箱,紫外老化试验箱,冷热冲击试验箱,恒温恒湿试验箱公司推荐!

在工业生产与科研领域,试验箱是验证产品环境适应性、保障质量的关键设备,其性能直接关系到检测数据准确性与研发效率。当前市场上,部分试验箱品牌存在元器件劣质、稳定性差、售后响应慢、功能单一等问题,让企业在选…

AI时代我们需要更多开发者:Shalini Kurapati的技术洞察

在AI已能编写25%代码的今天,Clearbox AI CEO Shalini Kurapati提出我们需要更多而非更少的开发者。她指出AI加速编码的同时也增加了漏洞、偏见和难以追踪的错误风险,强调需要人类专家设计架构、验证输出并构建可靠系…

新一代虚拟助手AI技术挑战赛启动

某中心推出Alexa Prize SimBot挑战赛,旨在通过持续学习、可教导AI、多模态理解和推理等通用AI方法,开发能够协助完成现实世界任务的新一代虚拟助手技术。某中心推出全新Alexa Prize SimBot挑战赛 某中心今日宣布推出…

经典视觉跟踪算法的MATLAB实现

经典视觉跟踪算法的MATLAB实现一、光流法(Lucas-Kanade) 原理:通过像素亮度恒定假设计算相邻帧间的运动矢量场 ​​应用​​:运动目标检测、视频压缩 ​​核心参数​​:窗口大小、金字塔层数、迭代次数 %% 光流法…

CSS各种选择器

选择器选择的是body里的div或者p标签那些 CSS的引入方式: 标签选择器:修改css标签 所有同名标签都会被改变 类选择器: id选择器: 通配符选择器: 复合选择器: 两种找选择器方式都可以

adobe illustrator中鼠标拖动移动幅度大

001、问题 adobe illustrator中鼠标拖动移动幅度大002、解决方法: 取消勾选对齐点和对齐像素。

python的字符串方法示例

Python 字符串提供了丰富的内置方法,除了之前提到的对齐方法外,还有许多常用功能。以下是一些核心方法分类及示例: 1. 分割与连接split(sep=None, maxsplit=-1) 按分隔符分割字符串,返回列表。sep 为分隔符(默认空…