CF1710B-Rain【堆】

正题

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


题目大意

一个数轴,每个位置上开始时都有一个ax=0a_x=0ax=0nnn次操作pi,hip_i,h_ipi,hi对于所有位置axa_xax令其变为ax+max⁡(hi−abs(pi−x),0)a_x+\max(h_i-abs(p_i-x),0)ax+max(hiabs(pix),0)

对于每个操作,求删除这个操作后能否使得最终所有的ax≤ma_x\leq maxm

1≤T≤104,1≤n≤2×105,1≤m≤1091\leq T\leq 10^4,1\leq n\leq 2\times 10^5,1\leq m\leq 10^91T104,1n2×105,1m109


解题思路

一个操作可以相当于一个分成五段的分段函数,每一段是一个一次函数。

我们把分段点提出来离散,这样每一段之间都是一个一次函数了,最值肯定在分段点上。

然后我们记录一下目前正在产生贡献的一次函数,斜率只有111−1-11,所以我们可以把这些函数分开来,然后按照截距从大到小用堆维护,每次取出最上面会不合法的就行了。

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


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cctype>
#include<set>
#include<queue>
#include<stack>
#define mp(x,y) make_pair(x,y)
#define ll long long
using namespace std;
const ll N=6e5+10;
ll T,n,m,cnt,x[N],p[N],b[N],ans[N];
vector<pair<ll,ll> > v[N];
stack<ll> st;set<pair<ll,ll> >af,bh;
set<pair<ll,ll> >::iterator it;
signed main()
{scanf("%lld",&T);while(T--){scanf("%lld%lld",&n,&m);cnt=0;for(ll i=1;i<=n;i++){scanf("%lld%lld",&x[i],&p[i]);b[++cnt]=x[i]-p[i];b[++cnt]=x[i];b[++cnt]=x[i]+p[i];}sort(b+1,b+1+cnt);cnt=unique(b+1,b+1+cnt)-b-1;for(ll i=1;i<=n;i++){ll z=lower_bound(b+1,b+1+cnt,x[i]-p[i])-b;v[z].push_back(mp(i,0));z=lower_bound(b+1,b+1+cnt,x[i])-b;v[z].push_back(mp(i,1));z=lower_bound(b+1,b+1+cnt,x[i]+p[i])-b;v[z].push_back(mp(i,2));}ll now=0,sum=0,flag=0;for(ll i=1;i<=n;i++)ans[i]=1;for(ll i=1;i<=cnt;i++){sum+=(b[i]-b[i-1])*now;if(sum>m){while(bh.size()){it=bh.begin();ll z=(*(it)).second;if(p[z]-x[z]+b[i]<sum-m)bh.erase(it),ans[z]=0;else break;}while(af.size()){it=af.begin();ll z=(*(it)).second;if(p[z]-b[i]+x[z]<sum-m)af.erase(it),ans[z]=0;else break;}while(!st.empty())ans[st.top()]=0,st.pop();flag=1;}for(ll j=0;j<v[i].size();j++){ll z=v[i][j].first;if(v[i][j].second==0){now++;if(flag)ans[z]=0;bh.insert(mp(p[z]-x[z],z));}else if(v[i][j].second==1){now-=2;if(bh.find(mp(p[z]-x[z],z))!=bh.end())bh.erase(mp(p[z]-x[z],z));af.insert(mp(p[z]+x[z],z));}else{now++;st.push(z);if(af.find(mp(p[z]-x[z],z))!=af.end())af.erase(mp(p[z]+x[z],z));}}v[i].clear();}while(!st.empty())st.pop();af.clear();bh.clear();for(ll i=1;i<=n;i++)printf("%lld",ans[i]);putchar('\n');}return 0;
}

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

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

相关文章

数据结构之线段树Ⅴ——(李超线段树)Robot,Product Sum,Building Bridges,Jump mission

文章目录RobotProduct SumBuilding BridgesJump missionRobot BZOJ3938 机器人每次一旦改变速度&#xff0c;直到下一次改变速度为止 这一时间段内机器人的位置下标可以用一次函数表示 如果知道时刻t1t_1t1​即将改变速度的机器人位置&#xff0c;以及最近的下一次机器人速…

模板:拉格朗日插值(多项式)

所谓拉格朗日插值&#xff0c;就是在“拉格朗日”进行的一项民俗活动。拉格朗日通常在每年2月的第82个星期三。 &#xff08;逃&#xff09; 前言 非常强大的算法。 当可以证明某个函数是一个 kkk 次多项式时&#xff0c;我们就可以插入 k1k1k1 个函数值并快速的求出我们要求…

程序员修神之路--分布式缓存的一条明路(附代码)

菜菜呀&#xff0c;由于公司业务不断扩大&#xff0c;线上分布式缓存服务器扛不住了呀程序员主力 Y总如果加硬件能解决的问题&#xff0c;那就不需要修改程序菜菜我是想加服务器来解决这个问题&#xff0c;但是有个问题呀程序员主力 Y总&#xff1f;&#xff1f;&#xff1f;菜…

2019 ICPC Asia Nanjing Regional

题号题目难度知识点AA Hard Problem签到题思维题BChessboardCDigital Path签到题dfs记忆化搜索DHolesEObservationFPaper GradingGPoker GameHPrince and Princess四稳铜快银思维题ISpace StationJSpyKTriangle三题快铜计算几何

uoj#751-[UNR #6]神隐【交互】

正题 题目链接:https://uoj.ac/problem/751 题目大意 有一棵nnn个点的树&#xff0c;你每次可以选择一个边集&#xff0c;交互库会返回你所有联通块&#xff0c;要求这棵树。 n≤2000n\leq 2000n≤2000&#xff0c;操作次数不超过141414。 或 n≤131072n\leq 131072n≤131072…

模板:快速莫比乌斯变换(FMT)+快速沃尔什变换(FWT)(多项式)

文章目录前言解析OR定义变换&#xff1a;逆变换代码AND代码XOR定义变换逆变换代码所谓快速沃尔什变换&#xff0c;就是快速的沃尔玛什锦专柜变换 &#xff08;逃&#xff09; 前言 正常卷积的定义&#xff1a;ck∑ijkaibjc_k\sum_{ijk}a_ib_jck​∑ijk​ai​bj​。 可以用FFT…

[AtCoder Beginner Contest 216] 题解

文章目录A - Signed DifficultyB - Same NameC - Many BallsD - Pair of BallsE - Amusement ParkF - Max Sum CountingG - 01Sequence比赛链接A - Signed Difficulty 签到题 #include <cstdio> int x, y; char c; int main() {scanf( "%d%c%d", &x, &am…

长沙.NET技术社区正式成立

感谢大家的关注&#xff0c;请允许我冒昧的向大家汇报长沙.NET技术社区第一次交流会的会议进展情况。活动过程汇报2019年2月17日&#xff0c;继深圳&#xff0c;广州&#xff0c;西安&#xff0c;成都&#xff0c;苏州相继成立了.net社区之后&#xff0c;酝酿已久的长沙.net社区…

A Hard Problem

A Hard Problem 题意&#xff1a; 给定一个n&#xff0c;要求找到最小的正数k&#xff0c;使得在集合T中任意选K个数&#xff0c;其中存在两个不同的u和v&#xff0c;u是v的因子 题解&#xff1a; 一开始想偏了&#xff0c;往质因数方向想了&#xff0c;然后因为1e9的以内的…

hdu7207-Find different【burnside引理】

正题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid7207 题目大意 一个序列aaa&#xff0c;和它相同的序列当且仅当能通过以下操作实现相同&#xff1a; 将a1a_1a1​丢到ana_nan​&#xff0c;其余的向前移动一位。令所有ai(ai1)%ma_i(a_i1)\%mai​(ai​1)%m 对于n…

洛谷P6097:【模板】子集卷积(FWT)

解析 完全可以当一道 DP 题而不是模板来做。 首先第一个条件&#xff1a; i∣jki|jki∣jk 比较简单&#xff0c;直接上FWT板子即可。 考虑第二个条件&#xff1a;i&j0i\&j0i&j0。若设 ∣x∣|x|∣x∣ 表示二进制下 1 的个数&#xff0c;那么就有&#xff1a; ∣i∣…

Asp.NetCore轻松学-部署到 IIS 进行托管

前言经过一段时间的学习&#xff0c;终于来到了部署服务这个环节&#xff0c;.NetCore 的部署方式非常的灵活多样&#xff0c;但是其万变不离其宗&#xff0c;所有的 Asp.NetCore 程序都基于端口的侦听&#xff0c;在部署的时候仅需要配置侦听地址、端口&#xff08;一个或者多…

线段树/扫描线问卷调查反馈——Rmq Problem / mex(主席树),Boring Queries(二分+st表+主席树),Colorful Squares(扫描线)

文章目录Rmq Problem / mexBoring QueriesColorful SquaresRmq Problem / mex luogu4137 对aia_iai​建权值线段树 再加上可持久化 对于第RRR个版本的线段树&#xff0c;每个叶子xxx存的是aixa_ixai​x的所有iii中最大的小于RRR的位置iii 那么询问[L,R][L,R][L,R]就转化成…

C - Digital Path 计蒜客 - 42397 05-29

C - Digital Path 计蒜客 - 42397 题意&#xff1a; 题意就是给出一个n ∗ m的数字矩阵每个矩阵元素之间只能上下左右走&#xff0c;而且下一个位置必须比当前位置的数字大1&#xff0c;入口和出口必须数边缘元素&#xff0c;求可以有多少条路径。 题解&#xff1a; 第一反…

响应式编程知多少 | Rx.NET 了解下

1. 引言An API for asynchronous programming with observable streams. ReactiveX is a combination of the best ideas from the Observer pattern, the Iterator pattern, and functional programming.ReactiveX 使用可观察数据流进行异步编程的API。 ReactiveX结合了观察者…

数据结构之trie树——First! G,电子字典,Type Printer,Nikitosh and xor

文章目录[USACO12DEC]First! G[JSOI2009]电子字典[IOI2008] Type PrinterNikitosh and xor[USACO12DEC]First! G luogu3065 考虑每一个字符串成为答案的可能 这意味着从字典树根到字符串最后一位就恰好对应重新定义的字典序 在第iii层的时候&#xff0c;想要走特定点&#…

H - Prince and Princess 计蒜客 - 42402

H - Prince and Princess 计蒜客 - 42402 题意: 你现在要寻找公主&#xff0c;有三种人&#xff0c;第一种是说真话的人(至少为1&#xff0c;因为公主是说真话的人)&#xff0c;第二种人是只会说假话的&#xff0c;第三种是胡说八道的(说的话真假都有可能)。现在给你三种人的…

模板:min-max容斥离散随机变量的几何分布(洛谷P3175:[HAOI2015]按位或)

前言 见到一道神题&#xff0c;学会两个知识点… 都是数学。 min-max容斥 给出式子&#xff1a; max⁡(S)∑T⊂S(−1)∣T∣1min⁡(T)\max(S)\sum_{T\sub S}(-1)^{|T|1}\min(T)max(S)T⊂S∑​(−1)∣T∣1min(T) min⁡(S)∑T⊂S(−1)∣T∣1max⁡(T)\min(S)\sum_{T\sub S}(-1)^…

杭电多校杂题收录

前言 和学长学弟一起打的hdu多校&#xff0c;打的很菜没啥难题收录&#xff0c;因为难的我都不会做。 正题 hdu7152-Copy 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid7152 题目大意 nnn个数字的序列aaa&#xff0c;mmm次操作&#xff0c;每次将一段[l,r][l,r][l,r…

.NET Core中的验证组件FluentValidation的实战分享

今天有人问我能不能出一篇FluentValidation的教程&#xff0c;刚好今天在实现我们的.NET Core实战项目之CMS的修改密码部分的功能中有用到FluentValidation&#xff0c;所以就以修改用户密码为实例来为大家进行一下ASP.NET Core中的验证组件FluentValidation的实战分享&#xf…