2021牛客暑期多校训练营1 J-Journey among Railway Stations(线段树+思维转化)

J-Journey among Railway Stations

在这里插入图片描述
注意区间合并时是否可行信息的合并。

假设线段树当前左节点lll维护的区间是[L,mid][L,\text{mid}][L,mid],右节点维护的区间为[mid+1,R][\text{mid+1},R][mid+1,R]

如果它们分别可行,意味着可以从L→midL\to \text{mid}Lmid并且可以从mid+1→R\text{mid+1}\to Rmid+1R即满足上述等式

uL′≤vL′,max⁡{uL′,uL+1′}≤vL+1′,…,max⁡{uL′,uL+1′,…,umid′}≤vmid′u_L ^{'}\leq v_{L}^{'},\max\{u_{L}^{'},u_{L+1}^{'}\} \leq v_{L+1}^{'},\dots, \max\{u_{L}^{'},u_{L+1}^{'},\dots,u_{\text{mid}}^{'}\} \leq v_{\text{mid}}^{'}uLvL,max{uL,uL+1}vL+1,,max{uL,uL+1,,umid}vmid

umid+1′≤vmid+1′,max⁡{umid+1′,umid+2′}≤vmid+2′,…,max⁡{umid+1′,umid+2′,…,uR′}≤vR′u_{\text{mid+1}} ^{'}\leq v_{\text{mid+1}}^{'},\max\{u_{\text{mid+1}}^{'},u_{\text{mid+2}}^{'}\} \leq v_{\text{mid+2}}^{'},\dots, \max\{u_{\text{mid+1}}^{'},u_{\text{mid+2}}^{'},\dots,u_{\text{R}}^{'}\} \leq v_{\text{R}}^{'}umid+1vmid+1,max{umid+1,umid+2}vmid+2,,max{umid+1,umid+2,,uR}vR

而如果我们要L→RL\to RLR需要满足
uL′≤vL′,max⁡{uL′,uL+1′}≤vL+1′,…,max⁡{uL′,uL+1′,…,uR′}≤vR′u_L ^{'}\leq v_{L}^{'},\max\{u_{L}^{'},u_{L+1}^{'}\} \leq v_{L+1}^{'},\dots, \max\{u_{L}^{'},u_{L+1}^{'},\dots,u_{\text{R}}^{'}\} \leq v_{\text{R}}^{'}uLvL,max{uL,uL+1}vL+1,,max{uL,uL+1,,uR}vR

还需要验证是否max⁡{uL′,uL+1′,…,umid′}≤{vmid+1′,vmid+2′,…,vR′}\max\{u_{L}^{'},u_{L+1}^{'},\dots,u_{\text{mid}}^{'}\}\leq\{v_{\text{mid+1}}^{'},v_{\text{mid+2}}^{'},\dots,v_{\text{R}}^{'}\}max{uL,uL+1,,umid}{vmid+1,vmid+2,,vR}
即只需验证
max⁡{uL′,uL+1′,…,umid′}≤min⁡{vmid+1′,vmid+2′,…,vR′}\max\{u_{L}^{'},u_{L+1}^{'},\dots,u_{\text{mid}}^{'}\}\leq\min\{v_{\text{mid+1}}^{'},v_{\text{mid+2}}^{'},\dots,v_{\text{R}}^{'}\}max{uL,uL+1,,umid}min{vmid+1,vmid+2,,vR}

因此我们线段树维护区间maxu和minv即可合并是否能够到达的信息。

Code1

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
template <class T=int> T rd()
{T res=0;T fg=1;char ch=getchar();while(!isdigit(ch)) {if(ch=='-') fg=-1;ch=getchar();}while( isdigit(ch)) res=(res<<1)+(res<<3)+(ch^48),ch=getchar();return res*fg;
}
const int N=1000010;
const ll INF=0x3f3f3f3f3f3f3f3f;
ll U[N],V[N],d[N],sum[N];
int n,m;
struct node
{int l,r;ll maxu,minv,tag;bool ok;
}tree[N<<2];
void pushup(node &u,node &l,node &r)
{u.maxu=max(l.maxu,r.maxu);u.minv=min(l.minv,r.minv);u.ok=(l.ok&&r.ok);if(l.maxu>r.minv) u.ok=0;
}
void build(int u,int l,int r)
{tree[u]={l,r};if(l==r){tree[u].maxu=U[l]+sum[l];tree[u].minv=V[l]+sum[l];tree[u].ok=1;return;}int mid=l+r>>1;build(u<<1,l,mid),build(u<<1|1,mid+1,r);pushup(tree[u],tree[u<<1],tree[u<<1|1]);
}
void pushdown(int u)
{if(!tree[u].tag) return;tree[u<<1].maxu+=tree[u].tag;tree[u<<1].minv+=tree[u].tag;tree[u<<1].tag+=tree[u].tag;tree[u<<1|1].maxu+=tree[u].tag;tree[u<<1|1].minv+=tree[u].tag;tree[u<<1|1].tag+=tree[u].tag;tree[u].tag=0;
}
void update(int u,int l,int r,int v)
{if(l<=tree[u].l&&tree[u].r<=r){tree[u].maxu+=v;tree[u].minv+=v;tree[u].tag+=v;return;}pushdown(u);int mid=tree[u].l+tree[u].r>>1;if(l<=mid)update(u<<1,l,r,v);if(r>mid)update(u<<1|1,l,r,v);pushup(tree[u],tree[u<<1],tree[u<<1|1]);
}
void modify(int u,int k,int p,int q)
{if(tree[u].l==tree[u].r){tree[u].maxu+=p;tree[u].minv+=q;return;}pushdown(u);int mid=tree[u].l+tree[u].r>>1;if(k<=mid) modify(u<<1,k,p,q);elsemodify(u<<1|1,k,p,q);pushup(tree[u],tree[u<<1],tree[u<<1|1]);
}node query(int u,int l,int r)
{if(l<=tree[u].l&&tree[u].r<=r) return tree[u];pushdown(u);int mid=tree[u].l+tree[u].r>>1;node v,vl,vr;vl={0,0,-INF,INF,0,1};vr={0,0,-INF,INF,0,1};if(l<=mid)vl=query(u<<1,l,r);if(r>mid)vr=query(u<<1|1,l,r);pushup(v,vl,vr);return v;
}
int main()
{int Tc=rd();while(Tc--){n=rd();for(int i=1;i<=n;i++) U[i]=rd<ll>();for(int i=1;i<=n;i++) V[i]=rd<ll>();for(int i=1;i<n;i++) d[i]=rd<ll>();sum[n]=0;for(int i=n-1;i>=1;i--) sum[i]=sum[i+1]+d[i];build(1,1,n);m=rd();while(m--){int op=rd();if(op==0){int l=rd(),r=rd();if(query(1,l,r).ok) puts("Yes");elseputs("No");}else if(op==1){int k=rd(),w=rd();update(1,1,k,w-d[k]);d[k]=w;}else{int k=rd(),p=rd(),q=rd();modify(1,k,p-U[k],q-V[k]);U[k]=p,V[k]=q;}}}return 0;
}

Code2

讲题人那个定义函数的做法待补~

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

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

相关文章

领域驱动设计,让程序员心中有码

“ 领域驱动设计的背后&#xff0c;需要开发者不能只专注于眼前功能的实现&#xff0c;而应该能够从全局去了解业务&#xff0c;并充分的将业务吃透&#xff0c;以可传承的知识的形式融入到开发过程中&#xff0c;只有这样才能促进产品更好的开发。”01—传统项目管理模式&…

Docker最全教程——从理论到实战(二)

容器是应用走向云端之后必然的发展趋势&#xff0c;因此笔者非常乐于和大家分享我们这段时间对容器的理解、心得和实践。本篇教程持续编写了2个星期左右&#xff0c;只是为了大家更好地了解、理解和消化这个技术&#xff0c;能够搭上这波车。你可以关注我们的公众号“magiccode…

图论模板详解:存图

图论千万条&#xff0c;存图第一条 1.邻接矩阵 用一个矩阵x[i][j]表示i到j的路径 优点&#xff1a;代码方便&#xff0c;易于去重 缺点&#xff1a;空间复杂度爆炸 优化&#xff1a;二维vector&#xff08;但是会变慢&#xff09; 2.链式前向星 &#xff08;抄资料毫不掩饰&a…

eShopOnContainers 知多少[4]:Catalog microservice

引言Catalog microservice&#xff08;目录微服务&#xff09;维护着所有产品信息&#xff0c;包括库存、价格。所以该微服务的核心业务为&#xff1a;产品信息的维护库存的更新价格的维护架构模式如上图所示&#xff0c;本微服务采用简单的数据驱动的CRUD微服务架构&#xff0…

2021牛客暑期多校训练营3 I-Kuriyama Mirai and Exclusive Or(异或+差分)

I-Kuriyama Mirai and Exclusive Or KeHe题解 diabolusexnihil题解 不过diabolusexnihil大佬的题解有一部分写错了应该是&#xff1a;每次分裂标记bl,ib_{l,i}bl,i​需要给数组[l2i−1,l2i)⊕2i−1[l2^{i-1},l2^i)\oplus2^{i-1}[l2i−1,l2i)⊕2i−1然后标记分裂成bl,i−1,bl2…

P5748-集合划分计数【EGF,多项式exp】

正题 题目链接:https://www.luogu.com.cn/problem/P5748 题目大意 求将nnn的排列分成若干个无序非空集合的方案。 输出答案对998244353998244353998244353取模。 1≤n≤105,1≤T≤10001\leq n\leq 10^5,1\leq T\leq 10001≤n≤105,1≤T≤1000 解题思路 就是求划分数 分成ii…

ASP.NET Core 实战:将 .NET Core 2.0 项目升级到 .NET Core 2.1

一、前言最近一两个星期&#xff0c;加班&#xff0c;然后回去后弄自己的博客&#xff0c;把自己的电脑从 Windows 10 改到 Ubuntu 18.10 又弄回 Windows 10&#xff0c;原本计划的学习 Vue 中生命周期的相关知识目前也没有任何的进展&#xff0c;嗯&#xff0c;罪过罪过。看了…

2021牛客暑期多校训练营4 B-Sample Game(概率DP)

B-Sample Game ding_ning123大佬题解 注&#xff1a;上述题解图片来自ding_ning123大佬题解 Code #include<bits/stdc.h> using namespace std; using lllong long; template <class Tint> T rd() {T res0;T fg1;char chgetchar();while(!isdigit(ch)) {if(ch-…

OrchardCore 如何实现模块化( Modular )和 Multi-Tenancy

一、概述通常我们会在 Startup 类通过 void ConfigureServices(IServiceCollection services) 配置应用的服务。常见的形如 AddXXX 的方法&#xff0c;实际上调用的都是 IServiceCollection 或直接说是 ServiceCollection 的 AddSingleton 等方法。调用ApplicationBuilder 的 R…

牛客题霸 [ 最长回文子串] C++题解/答案

牛客题霸 [ 最长回文子串] C题解/答案 题目描述 对于一个字符串&#xff0c;请设计一个高效算法&#xff0c;计算其中最长回文子串的长度。 给定字符串A以及它的长度n&#xff0c;请返回最长回文子串的长度。 题解&#xff1a; 两个方法&#xff1a; 一个是经典暴力&#…

【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析

上篇文章我介绍了如何在网关上实现客户端自定义限流功能&#xff0c;基本完成了关于网关的一些自定义扩展需求&#xff0c;后面几篇将介绍基于IdentityServer4&#xff08;后面简称Ids4&#xff09;的认证相关知识&#xff0c;在具体介绍ids4实现我们统一认证的相关功能前&…

T183637-变异距离(2021 CoE III C)【单调栈】

正题 题目链接:https://www.luogu.com.cn/problem/T183637 题目大意 给出nnn个二元组(xi,yi)(x_i,y_i)(xi​,yi​)&#xff0c;求最大的 ∣xi−xj∣min{∣yi∣,∣yj∣}|x_i-x_j|\times min\{|y_i|,|y_j|\}∣xi​−xj​∣min{∣yi​∣,∣yj​∣} 1≤n≤2106,−106≤xi≤106,−…

dfs剪枝:洛谷P2809 hzwer爱折纸

传送门 解析 dfs暴力枚举即可 这题的重点是如何剪枝 不难发现&#xff0c;随着不断处理&#xff0c;纸条只会越来越短&#xff0c;且所有数字总加和不变 我一开始想到了2个条件&#xff1a; 1.当前长度比理想纸条小&#xff0c;return&#xff1b; 2.总加和与理想纸条不等&a…

[译]聊聊C#中的泛型的使用

写在前面今天忙里偷闲在浏览外文的时候看到一篇讲C#中泛型的使用的文章&#xff0c;因此加上本人的理解以及四级没过的英语水平斗胆给大伙进行了翻译&#xff0c;当然在翻译的过程中发现了一些问题&#xff0c;因此也进行了纠正&#xff0c;当然&#xff0c;原文的地址我放在最…

P5405-[CTS2019]氪金手游【树形dp,容斥,数学期望】

前言 话说在LojLojLoj下了个数据发现这题的名字叫fgofgofgo 正题 题目链接:https://www.luogu.com.cn/problem/P5405 题目大意 nnn张卡的权值为1/2/31/2/31/2/3的概率权重分别是px,1/2/3p_{x,1/2/3}px,1/2/3​&#xff0c;然后按照权值每次获得一张未获得的卡&#xff0c;然后…

模板:线段树

文章目录引言思想模板建树单点修改 / 查询区间修改/查询总结练习引言 有一类题目:要求在区间上维护信息&#xff0c;比如带修改区间求和问题。考虑到枚举求和肯定会超时&#xff0c;我们可以通过一些数据结构来维护信息&#xff0c;例如线段树。 它功能强大&#xff0c;支持区…

Docker最全教程——从理论到实战(三)

容器是应用走向云端之后必然的发展趋势&#xff0c;因此笔者非常乐于和大家分享我们这段时间对容器的理解、心得和实践。本篇教程持续编写了2个星期左右&#xff0c;只是为了大家更好地了解、理解和消化这个技术&#xff0c;能够搭上这波车。你可以关注我们的公众号“magiccode…

高并发、低延迟之C#玩转CPU高速缓存(附示例)

写在前面好久没有写博客了&#xff0c;一直在不断地探索响应式DDD&#xff0c;又get到了很多新知识&#xff0c;解惑了很多老问题&#xff0c;最近读了Martin Fowler大师一篇非常精彩的博客The LMAX Architecture&#xff0c;里面有一个术语Mechanical Sympathy&#xff0c;姑且…

RMQ问题:与众不同(st表的高端应用)

解析 预处理 用pre[i]表示以i结尾的最长完美序列起始点&#xff0c;用last[i]表示数字i最后出现的位置 那么可以得到递推式&#xff1a; pre[i]max(pre[i-1],last[x[i]]1);也就是说这个pre要么是受前一位一样的限制&#xff0c;要么是受自己的限制 用f[i]表示以i结尾的最长完…

Docker最全教程——从理论到实战(四)

容器是应用走向云端之后必然的发展趋势&#xff0c;因此笔者非常乐于和大家分享我们这段时间对容器的理解、心得和实践。本篇教程持续编写了2个星期左右并且一直在完善、补充具体的细节和实践&#xff0c;预计全部完成需要1到2个月的时间。由于编写的过程中极其费时&#xff0c…