[XSY4170] 妹子(线段树上二分)

传送门

题意:
给出两个长度为NNN的整数序列A1A2...ANA_1A_2...A_NA1A2...AN,B1B2...BNB_1B_2...B_NB1B2...BN。有MMM组询问(opt,l,r,d)(opt,l,r,d)(opt,l,r,d),令n=r−l+1n=r-l+1n=rl+1
opt=Aopt=Aopt=A∀i∈[1,n],ai=Al+i−1+d,bi=Bl+i−1\forall i\in[1,n],a_i=A_{l+i-1}+d,b_i=B_{l+i-1}i[1,n],ai=Al+i1+d,bi=Bl+i1
opt=Bopt=Bopt=B∀i∈[1,n],ai=Al+i−1,bi=Bl+i−1+d\forall i\in[1,n],a_i=A_{l+i-1},b_i=B_{l+i-1}+di[1,n],ai=Al+i1,bi=Bl+i1+d
min(max{a1,a2,...,ap,bp+1,bp+2,...,bn}∣0≤p≤n)min(max\{a_1,a_2,...,a_p,b_{p+1},b_{p+2},...,b_n\}|0\leq p\leq n)min(max{a1,a2,...,ap,bp+1,bp+2,...,bn}0pn)

题解:
maxa=max{a1,a2,...,ap}max_a=max\{a_1,a_2,...,a_p\}maxa=max{a1,a2,...,ap},随着ppp的增大,maxamax_amaxa单调不降。
maxb=max{bp+1,bp+2,...,bn}max_b=max\{b_{p+1},b_{p+2},...,b_n\}maxb=max{bp+1,bp+2,...,bn},随着ppp的增大,maxbmax_bmaxb单调不升。
max(maxa,maxb)max(max_a,max_b)max(maxa,maxb)一定先不升,再不降,因此最优的ppp可以二分得到:
p=midp=midp=mid时,

  • maxa>maxbmax_a>max_bmaxa>maxb,那么最优的ppp[l,mid][l,mid][l,mid]中;
  • maxa≤maxbmax_a\leq max_bmaxamaxb,那么最优的ppp[mid+1,r][mid+1,r][mid+1,r]中。

可以用线段树上二分来得到最优的ppp

#include<bits/stdc++.h> 
using namespace std;
typedef long long ll;
typedef pair<int,int> pr;
#define FR first
#define SE second
namespace IO{char buf[1000010],*cur=buf+1000010;inline char getc(){(cur==buf+1000010)?fread(cur=buf,1,1000010,stdin):0;return *cur++;}char buff[1000010],*curr=buff;inline void flush(){fwrite(buff,1,curr-buff,stdout);}inline void putc(const char &ch){(curr==buff+1000010)?fwrite(curr=buff,1,1000010,stdout):0;*curr++=ch;}inline void rd(int &x){x=0;char ch=getc();int f=1;while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getc();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getc();}x*=f;}char st[60];int tp;void PT(int x){if(x==0)putc('0');else{if(x<0){putc('-');x=-x;}while(x>0){st[++tp]=x%10+'0';x/=10;}}while(tp)putc(st[tp--]);}
}
using IO::getc;
using IO::putc;
using IO::rd;
using IO::PT;
int n,q;
const int N=1000010;
int maxa[N<<2],maxb[N<<2],tga[N<<2],tgb[N<<2];
int A[N],B[N];
void pushup(int u){maxa[u]=max(maxa[u<<1],maxa[u<<1|1]);maxb[u]=max(maxb[u<<1],maxb[u<<1|1]);
} 
void Add(int u,int x,int y){maxa[u]+=x;maxb[u]+=y;tga[u]+=x;tgb[u]+=y;
}
void pushdown(int u){Add(u<<1,tga[u],tgb[u]);Add(u<<1|1,tga[u],tgb[u]);tga[u]=tgb[u]=0;
}
void build(int u,int l,int r){if(l==r){maxa[u]=A[l];maxb[u]=B[l];return;}int mid=(l+r)>>1;build(u<<1,l,mid);build(u<<1|1,mid+1,r);pushup(u);
}
void update(int u,int l,int r,int L,int R,int d,bool ty){if(l==L&&r==R){if(ty) Add(u,d,0);else Add(u,0,d);return;}pushdown(u);int mid=(l+r)>>1;if(R<=mid) update(u<<1,l,mid,L,R,d,ty);else if(mid<L) update(u<<1|1,mid+1,r,L,R,d,ty);else{update(u<<1,l,mid,L,mid,d,ty);update(u<<1|1,mid+1,r,mid+1,R,d,ty);}pushup(u); 
} 
pr ans[N<<2];
void pre(int u,int l,int r,int L,int R){if(l==L&&r==R){ans[u]=pr(maxa[u],maxb[u]);return;}pushdown(u);int mid=(l+r)>>1;if(R<=mid){pre(u<<1,l,mid,L,R);ans[u]=ans[u<<1];}else if(mid<L){pre(u<<1|1,mid+1,r,L,R);ans[u]=ans[u<<1|1];}else{pre(u<<1,l,mid,L,mid);pre(u<<1|1,mid+1,r,mid+1,R);ans[u].FR=max(ans[u<<1].FR,ans[u<<1|1].FR);ans[u].SE=max(ans[u<<1].SE,ans[u<<1|1].SE);}
}
int solve(int u,int l,int r,int L,int R){if(l==L&&r==R){if(l==r) return min(maxa[u],maxb[u]);int mid=(l+r)>>1;pushdown(u);int s1=maxa[u<<1],s2=maxb[u<<1|1];if(s1>s2) return min(s1,max(s2,solve(u<<1,l,mid,l,mid)));else return min(s2,max(s1,solve(u<<1|1,mid+1,r,mid+1,r)));} int mid=(l+r)>>1;if(R<=mid) return solve(u<<1,l,mid,L,R);else if(mid<L) return solve(u<<1|1,mid+1,r,L,R);else{int s1=ans[u<<1].FR,s2=ans[u<<1|1].SE;if(s1>s2) return min(s1,max(s2,solve(u<<1,l,mid,L,mid)));else return min(s2,max(s1,solve(u<<1|1,mid+1,r,mid+1,R)));}
}
char opt[10];
int main(){rd(n);rd(q);for(int i=1;i<=n;i++) rd(A[i]);for(int i=1;i<=n;i++) rd(B[i]);build(1,1,n);int l,r,d;while(q--){char c=getc();while(c!='A'&&c!='B')c=getc();rd(l);rd(r);rd(d);if(c=='A')update(1,1,n,l,r,d,1);else update(1,1,n,l,r,d,0);rd(l);rd(r);pre(1,1,n,l,r);PT(solve(1,1,n,l,r));putc('\n');} IO::flush();return 0;
}

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

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

相关文章

P3643-[APIO2016]划艇【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P3643 题目大意 求有多少个nnn个数的序列xxx满足&#xff0c;xi∈{0}∪[ai,bi]x_i\in \{0\}\cup[a_i,b_i]xi​∈{0}∪[ai​,bi​]且非000数递增。 解题思路 会发现ai,bia_i,b_iai​,bi​很大不能太暴力的将第二维的dpdpdp设…

.Net思想篇:为何我们需要思想大洗礼?

前言每当说一件事的时候&#xff0c;我喜欢回溯往事&#xff0c;这样思有所依&#xff0c;文有所凭&#xff0c;才能达到打字如尿崩&#xff0c;一发不可收拾的流畅度。让我们将时光回溯到08年&#xff0c;当时和同学们就有了学java和.net之争&#xff0c;当然不止这些&#xf…

【Manacher】最长双回文串(luogu 4555)

正题 luogu 4555 题目大意 给出一个字符串&#xff0c;让你求两个相邻的回文串的最大长度和 解题思路 先用Manacher求出最长回文串 然后暴力配对即可 代码 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define l…

[AGC009B] Tournament(多叉树转二叉树后的最小可能深度)

传送门 把aia_iai​看成faifa_ifai​&#xff0c;建出一棵多叉树&#xff0c;再把多叉树转成二叉树&#xff0c;转出来的每棵二叉树对应着一种比赛方式。 以n8,a2,...,81,1,2,4,3,3,3n8,a_{2,...,8}1,1,2,4,3,3,3n8,a2,...,8​1,1,2,4,3,3,3为例&#xff0c; 多叉树转出的二…

C# 8中的Async Streams

关键要点异步编程技术提供了一种提高程序响应能力的方法。Async/Await模式在C# 5中首次亮相&#xff0c;但只能返回单个标量值。C# 8添加了异步流&#xff08;Async Streams&#xff09;&#xff0c;允许异步方法返回多个值&#xff0c;从而扩展了其可用性。异步流提供了一种用…

线段树回顾

这个博主的线段树我觉得讲的很细了 文章目录建树区间查询&#xff0c;单点修改区间修改&#xff0c;单点查询区间修改&#xff0c;区间查询&#xff08;带pushdown&#xff09;乘法线段树根号线段树建树 struct node{ll l,r;ll sum,mlz,plz; }tree[4*maxn]; inline void bulid…

P3175-[HAOI2015]按位或【min-max容斥,FWT】

正题 题目链接:https://www.luogu.com.cn/problem/P3175 题目大意 开始有一个nnn位二进制数s0s0s0&#xff0c;每次有pip_ipi​概率选取数字iii让sss或上这个数字iii&#xff0c;求期望多少次能够让sss的nnn个位都变为111。 解题思路 因为是或所以我们只关心最后一个选中的数…

【DP】建学校问题(luogu 2803/2018 特长生 T3)

正题 luogu 2803 题目大意 给出n个点&#xff0c;和相邻的点的距离&#xff0c;每个点有一个权值&#xff0c;现在让你建k个特殊点&#xff0c;使所有点到其中一个特殊点的代价之和最小 解题思路 先预处理处一个区间到同一个特殊点的最小代价 然后DP即可 – 代码 #inclu…

[XSY3112] 接水果(树上包含路径,整体二分,扫描线)

传送门 给出一棵nnn个点的树。接下来给出PPP条树上路径ai→bia_i\to b_iai​→bi​&#xff0c;及其权值cic_ici​。最后有QQQ个询问&#xff0c;每个询问给出一条树上路径ui→viu_i\to v_iui​→vi​&#xff0c;问在包含ui→viu_i\to v_iui​→vi​的所有树上路径中&#xf…

Tr A HDU1575

文章目录题目&#xff1a;题解&#xff1a;代码&#xff1a;Tr A HDU1575题目&#xff1a; A为一个方阵&#xff0c;则Tr A表示A的迹&#xff08;就是主对角线上各项的和&#xff09;&#xff0c;现要求Tr(A^k)%9973。 Input 数据的第一行是一个T&#xff0c;表示有T组数据。 每…

asp.net core webapi项目配置全局路由

一、前言在开发项目的过程中&#xff0c;我新创建了一个controller&#xff0c;发现vs会给我们直接在controller头添加前缀&#xff0c;比如[Route("api/[controller]")],即在访问接口的时候会变成http://localhost:8000/api/values&#xff0c;但是如果控制器有很多…

CF622F-The Sum of the k-th Powers【拉格朗日插值】

正题 题目链接:https://www.luogu.com.cn/problem/CF622F 题目大意 给出n,kn,kn,k&#xff0c;求 ∑i1nik\sum_{i1}^ni^ki1∑n​ik 解题思路 很经典的拉格朗日差值问题 这个东西显然是可以化成一个k1k1k1次的多项式的&#xff0c;所以我可以直接代k2k2k2个点插出值来。看到顺…

平板游戏问题(luogu 2003/2018 特长生 T4)

正题 luogu 2003 题目大意 在平面上有若干块板子&#xff0c;每块板子的左右端分别向下连一条柱子&#xff0c;连到第一块板子&#xff0c;问你共要多少长度的柱子 解题思路 枚举一个板子中间的柱子&#xff08;即对这些柱子可能有贡献&#xff09; 然后取一个最高的立即可…

位运算及其性质

定义 运算名符号效果按位与&如果两个相应的二进制位都为1&#xff0c;则该位的结果值为1&#xff0c;否则为0按位或l两个相应的二进制位中只要有一个为1&#xff0c;该位的结果值为1按位异或^若参加运算的两个二进制位值相同则为0&#xff0c;否则为1取反~对一个二进制数按…

C Looooops POJ - 2115

C Looooops POJ - 2115 题目&#xff1a; A Compiler Mystery: We are given a C-language style for loop of type statement; I.e., a loop which starts by setting variable to value A and while variable is not equal to B, repeats statement followed by increasing …

IdentityServer4实战 - 谈谈 JWT Token 的安全策略

一.前言众所周知&#xff0c;IdentityServer4 默认支持两种类型的 Token&#xff0c;一种是 Reference Token&#xff0c;一种是 JWT Token 。前者的特点是 Token 的有效与否是由 Token 颁发服务集中化控制的&#xff0c;颁发的时候会持久化 Token&#xff0c;然后每次验证都需…

P4320-道路相遇,P5058-[ZJOI2004]嗅探器【圆方树,LCA】

两题差不多就一起写了 P4320-道路相遇 题目链接:https://www.luogu.com.cn/problem/P4320 题目大意 nnn个点mmm条边的一张图&#xff0c;qqq次询问两个点之间路径的必经点数量。 解题思路 建出圆方树然后问题就变为询问两个点之间路径的圆点数量&#xff0c;可以直接倍增L…

【Manacher】绿绿和串串(luogu 5446)

正题 luogu 5446 题目大意 定义对折为&#xff1a;以最后一个字符为对称轴翻转 问你一个字符串可能是由那些前缀对折若干次而来的 解题思路 先用Manacher求出回文长度 那么满足以下条件之一的前缀就是可行方案 最后一个字符的回文长度加上它的位置为n&#xff08;后面若干…

使用.Net Core实现FNV分布式hash一致性算法

说到FNV哈希算法不得不提Memcached&#xff0c;我们先简单介绍一下Memcached。MemcachedMemcached分为客户端与服务端&#xff0c;Memcached是服务端&#xff0c;服务端本身不提供分布式实现&#xff0c;只是一个单独的k-v缓存&#xff1b;Memcached的分布式是在客户端类库中实…

一起开心暑假集训第一周限时训练 2020/7/5

文章目录A - Goldbachs Conjecture POJ - 2262B - 同余方程 计蒜客 - T2010C - Tr A HDU - 1575D - C Looooops POJ - 2115vjudge试题集链接 A - Goldbach’s Conjecture POJ - 2262 试题链接&#xff1a; 线性筛先预处理&#xff0c;然后判断就行 #include<iostream>…