P7560-[JOISC 2021 Day1]フードコート【吉司机线段树】

正题

题目链接:https://www.luogu.com.cn/problem/P7560


题目大意

nnn个队列,要求支持操作:

  1. [L,R][L,R][L,R]的队列中插入kkkccc
  2. 出队[L,R][L,R][L,R]中的kkk个元素。(如果不足kkk个就全部出队)
  3. 求第aaa个队列中的第bbb个元素。

1≤n,m,q≤25×1041\leq n,m,q\leq 25\times 10^41n,m,q25×104


解题思路

考虑一个离线的做法,因为是队列,如果我们先把所有操作都做了,那么在某个时刻某个实际队列就是目前队列中的一个区间,我们可以考虑算出每个询问在区间中的位置,然后离线从左到右扫用一个线段树维护整个的队列。

然后会发现难点在于求位置,因为我们要顺着操作顺序来维护每个队列目前所在的区间,而对于二操作当不满kkk个时左端点不会往前弹kkk个。

我们先用一个数据结构维护一个每个队列目前只算111操作总共有多少个数,这个很简单。再维护一个每个队列目前还剩下多少个数,这个难点在于区间减的时候不能减到000以下,这个可以用吉司机线段树,维护一个最小值和次小值,最小值减到000以下时打一个懒标记给最小值加到000,次小值减到000以下时直接递归修改即可。

时间复杂度:O(nlog⁡n)O(n\log n)O(nlogn)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define ll long long
#define mp(x,y) make_pair(x,y)
#define lowbit(x) (x&-x)
using namespace std;
const ll N=1e6;
struct node{ll col,val,pos;
};
ll n,m,q,ans[N];
vector<node> v[N];
vector<pair<ll,ll> >u[N];
struct TreeBinary{ll t[N];void Change(ll x,ll val){while(x<=n){t[x]+=val;x+=lowbit(x);}return;}ll Ask(ll x){ll ans=0;while(x){ans+=t[x];x-=lowbit(x);}return ans;}
}B;
struct SegTree{ll mx[N<<2],mi[N<<2],lazy1[N<<2],lazy2[N<<2];void PushUp(ll x){if(mi[x*2]==mi[x*2+1])mi[x]=mi[x*2],mx[x]=min(mx[x*2],mx[x*2+1]);else if(mi[x*2]<mi[x*2+1])mi[x]=mi[x*2],mx[x]=min(mx[x*2],mi[x*2+1]);else mi[x]=mi[x*2+1],mx[x]=min(mi[x*2],mx[x*2+1]);return;}void PushDown(ll x){ll p=min(mi[x*2],mi[x*2+1]);if(mi[x*2]==p)mi[x*2]+=lazy2[x],lazy2[x*2]+=lazy2[x];if(mi[x*2+1]==p)mi[x*2+1]+=lazy2[x],lazy2[x*2+1]+=lazy2[x];mx[x*2]+=lazy1[x];mx[x*2+1]+=lazy1[x];mi[x*2]+=lazy1[x];mi[x*2+1]+=lazy1[x];lazy1[x*2]+=lazy1[x];lazy1[x*2+1]+=lazy1[x];lazy1[x]=lazy2[x]=0;return;}void Downdata(ll x){if(mi[x]>=0)return;if(mx[x]>0){lazy2[x]+=-mi[x];mi[x]=0;return;}PushDown(x);Downdata(x*2);Downdata(x*2+1);PushUp(x);}void Change(ll x,ll L,ll R,ll l,ll r,ll val){if(L==l&&R==r){lazy1[x]+=val;mi[x]+=val;mx[x]+=val;Downdata(x);return;}ll mid=(L+R)>>1;PushDown(x);if(r<=mid)Change(x*2,L,mid,l,r,val);else if(l>mid)Change(x*2+1,mid+1,R,l,r,val);else Change(x*2,L,mid,l,mid,val),Change(x*2+1,mid+1,R,mid+1,r,val);PushUp(x);return;}ll Ask(ll x,ll L,ll R,ll pos){if(L==R)return mi[x];ll mid=(L+R)>>1;PushDown(x);if(pos<=mid)return Ask(x*2,L,mid,pos);return Ask(x*2+1,mid+1,R,pos);}
}T;
struct SegTree2{ll w[N<<2],col[N];void Change(ll x,ll L,ll R,ll pos,ll c,ll val){if(L==R){col[L]=c;w[x]=val;return;}ll mid=(L+R)>>1;if(pos<=mid)Change(x*2,L,mid,pos,c,val);else Change(x*2+1,mid+1,R,pos,c,val);w[x]=w[x*2]+w[x*2+1];}ll Ask(ll x,ll L,ll R,ll val){if(L==R)return col[L];ll mid=(L+R)>>1;if(w[x*2]>=val)return Ask(x*2,L,mid,val);return Ask(x*2+1,mid+1,R,val-w[x*2]);}
}G;
signed main()
{memset(T.mx,0x3f,sizeof(T.mx));scanf("%lld%lld%lld",&n,&m,&q);for(ll i=1;i<=q;i++){ll op;scanf("%lld",&op);ans[i]=-1;if(op==1){ll l,r,c,k;scanf("%lld%lld%lld%lld",&l,&r,&c,&k);B.Change(l,k);B.Change(r+1,-k);T.Change(1,1,n,l,r,k);v[l].push_back((node){c,k,i});v[r+1].push_back((node){c,0,i});}else if(op==2){ll l,r,k;scanf("%lld%lld%lld",&l,&r,&k);T.Change(1,1,n,l,r,-k);}else{ll a,b;scanf("%lld%lld",&a,&b);ll k=T.Ask(1,1,n,a);if(k<b)ans[i]=0;else u[a].push_back(mp(B.Ask(a)-k+b,i));}}for(ll i=1;i<=n;i++){for(ll j=0;j<v[i].size();j++)G.Change(1,1,q,v[i][j].pos,v[i][j].col,v[i][j].val);for(ll j=0;j<u[i].size();j++)ans[u[i][j].second]=G.Ask(1,1,q,u[i][j].first);}for(ll i=1;i<=q;i++)if(ans[i]!=-1)printf("%lld\n",ans[i]);return 0;
}

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

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

相关文章

“幕后英雄”之Backing Fields【Microsoft Entity Framework Core随笔】

刘德华 有一首歌叫《马桶》&#xff0c;其中有一句歌词是&#xff1a;每一个马桶都是英雄。EFCore也有一个英雄&#xff0c;在幕后默默地任劳任怨。它就叫 "支持字段" (Backing Fields):中文版&#xff1a;https://docs.microsoft.com/zh-cn/ef/core/modeling/backin…

P4169 [Violet]天使玩偶/SJY摆棋子(CDQ分治、暴力)

解析 之前用KDtree做的一道题 由于懒不想再码一遍了 考虑CDQ分治 关键就是如何拿掉绝对值 如果只维护左下角的&#xff0c;显然就是一个经典的三维偏序问题了 但是本题不一定在左下角&#xff0c;也可能在左上、右下、右上 怎么办&#xff1f; 把坐标翻转翻转直接暴力做四遍即…

数论练习二之BSGS算法——随机数生成器,Matrix,Lunar New Year and a Recursive Sequence,Fermat‘s Last Theorem

[SDOI2013] 随机数生成器 description solution 肯定是非常想找一个通项公式来表示第nnn个数的 依据形式&#xff0c;考虑化成等比数列 xi1ka(xik)a⋅xibt⇒kba−1x_{i1}ka(x_ik)ax_ibt\Rightarrow k\frac{b}{a-1}xi1​ka(xi​k)a⋅xi​bt⇒ka−1b​ ⇒xiba−1ai−1(x1ba−…

L - Clock Master Gym - 102798L

L - Clock Master Gym - 102798L 题意&#xff1a; 给定一个数字n&#xff0c;令na1a2a3…求lcm(a1,a2,a3,…)的最大值,以loge(x)的形式输出 题解&#xff1a; lcm要求尽可能大&#xff0c;我们就要保证a1,a2,a3…尽可能为质数或质数的整数次幂&#xff0c;我们假设a1是p1x…

P7739-[NOI2021]密码箱【Splay,矩阵乘法】

正题 题目链接:https://www.luogu.com.cn/problem/P7739 题目描述 懒得概括&#xff0c;摸了。 Yelekastee 是 U 国著名的考古学家。在最近的一次考古行动中&#xff0c;他发掘出了一个远古时期的密码箱。经过周密而严谨的考证&#xff0c;Yelekastee 得知密码箱的密码和某一…

NetCore下模拟和使用Modbus工业通信协议

Tips&#xff1a;1、目前NetCore下与Modbus通信的框架主要选择了 Modbus.Net https://github.com/parallelbgls/Modbus.Net2、modbus是常用的工业通信协议&#xff0c;在软件调试时可以通过modbus pollslave模拟通信通过达到调试目的&#xff0c;下图是我使用软件1&#xff09…

codeforces:65

文章目录前言CF65A Harry Potter and Three SpellsDescription\text{Description}DescriptionSolution\text{Solution}SolutionCode\text{Code}CodeCF65B Harry Potter and the History of MagicDescription\text{Description}DescriptionSolution\text{Solution}SolutionCode\…

C - Rencontre Gym - 102798C

C - Rencontre Gym - 102798C 参考题解&#xff1a; 参考一 参考二 题意&#xff1a; 有一棵树&#xff0c;树上的点分为三种&#xff0c;&#xff08;一个点可以为多种&#xff09;&#xff0c;现在分别在三种点中随机选一点a&#xff0c;b&#xff0c;c&#xff0c;然后找到…

API标准化成为技术团队面临的最大挑战

调查表明&#xff0c;API 标准化成为了技术团队面临的最大挑战。SmartBear 发布了 2019 年 API 状态报告“The State of API 2019”&#xff0c;此报告旨在为 API 行业建立关于软件团队在 2019 年规划、设计、开发、测试、记录和监控 API 的方法、实践和工具的基准。此次调查有…

线性代数五之高斯消元——[SDOI2010]外星千足虫,[HNOI2013]游走,[HNOI2011]XOR和路径,[hdu 4035]Maze

多类型高斯消元杂题[SDOI2010]外星千足虫descriptionsolutioncode[HNOI2013]游走descriptionsolutioncode[HNOI2011]XOR和路径descriptionsolutioncodeMaze(树上高斯消元)problemsolutioncode[SDOI2010]外星千足虫 description solution 高斯消元的模板题 虽然感觉问了个最…

P6117-[JOI 2019 Final]コイン集め【贪心】

正题 题目链接:https://www.luogu.com.cn/problem/P6117 题目大意 平面上有2n2n2n的硬币&#xff0c;要给每个硬币匹配一个x∈[1,n],y∈[1,2]x\in[1,n],y\in[1,2]x∈[1,n],y∈[1,2]的位置&#xff08;不能重复&#xff09;。 使得所有硬币和它们匹配位置的曼哈顿距离之和最小…

CF788789(div1div2)

文章目录前言CF789A Anastasia and pebblesDescription\text{Description}DescriptionSolution\text{Solution}SolutionCode\text{Code}CodeCF789B Masha and geometric depressionDescription\text{Description}DescriptionSolution\text{Solution}SolutionCode\text{Code}Cod…

【HDU-2376】Average distance

【HDU-2376】Average distance 题意&#xff1a; 给你一个树&#xff0c;求树上任意两个点之间的距离的平均值 题解&#xff1a; 就是求出任意两点之间的距离和然后除以边数 ”任意两点之间的距离“ 和怎么算&#xff1f; 我们去考虑边的贡献情况&#xff1a; 对于边(u,v)&…

Ocelot 资源汇总

前言最近一两年.NET Core的关注度持续上升, 微服务及云原生应用开发上采用.NET Core也越来越多&#xff0c;Ocelot 作为.NET Core平台下一款开源的API 网关开发库越来越得到社区的认可&#xff0c;应用到生产中的案例也有好几百了。春节抽空整理了现有网上公开的Ocelot相关的资…

P6698-[BalticOI 2020 Day2]病毒【AC自动机,dp,SPFA】

正题 题目链接:https://www.luogu.com.cn/problem/P6698 题目大意 有一个包含0∼G−10\sim G-10∼G−1的字符集&#xff0c;其中有nnn种变换&#xff0c;能够将一个字符ai(ai>1)a_i(a_i>1)ai​(ai​>1)变为一串字符bib_ibi​&#xff0c;当一个字符串中只剩下000和1…

[TJOI2017]城市(未解决)

[TJOI2017]城市 题意&#xff1a; 一棵树&#xff0c;现在要求你将一条边改变他的位置&#xff0c;&#xff08;即改变左右所连接的端点&#xff0c;权值不变&#xff09;&#xff0c;修改后任意两点相互可达&#xff0c;且使得两个点之间的最大交通费用最小 题解: 有O(n^2…

数论三之组合数学Ⅰ-Max-Min Sums,Binomial Coefficient is Fun,Strivore,Bubble Sort,放棋子,LOJ6671,Iroha and a Grid

组合计数我最爱Max-Min SumsdescriptionsolutioncodeBinomial Coefficient is FundescriptionsolutioncodeStrivoredescriptionsolutioncodeBubble Sortdescriptionsolutioncode[HAOI2016]放棋子descriptionsolutioncodeEntropyIncreaser 与 MinecraftdescriptionsolutioncodeD…

12.15模拟:总结

前言 20分 《好耶》 很好的把所有错误都犯了一遍。 8&#xff1a;30写完AB题 11&#xff1a;00还是只写完AB题, T1代码没有提交 T2数组算错空间全RE T3快结束了发现CE了删掉第二档后还交成了之前写的失败版本(结果靠这破玩意水到了仅有的20分) T4考场其实猜到了结论但没证出来…

语言之争与读书有感

移动互联网无处不在的今天&#xff0c;不同的学习方式让我们受益颇多。有人喜欢通过手机阅读各类技术专家的公众号分享&#xff1b;有人喜欢通过逛逛不同的博客&#xff0c;来了解当前时下的技术&#xff1b;也有人喜欢通过社区的形式&#xff0c;跟优秀的导师们一起梳理和发展…

CF566E-Restoring Map【bitset】

正题 题目链接:https://www.luogu.com.cn/problem/CF566E 题目大意 有一棵树&#xff0c;但是你不知道它的形态。你现在只知道距离每个点距离不超过222的点集&#xff0c;但是你不知道每个点集是对应哪个点的。 现在要你求这棵树。 2≤n≤10002\leq n\leq 10002≤n≤1000 解…