当前位置: 首页 > news >正文

P7706 「Wdsr-2.7」文文的摄影布置

P7706 「Wdsr-2.7」文文的摄影布置

题目背景

作为幻想乡知名的记者射命丸文,文文常常需要为文文新闻采集相关的照片素材。

具体而言,文文会采集一大串的图片,用于为新的一期报纸提供图片。作为一份简短的快报,文文会从素材库中使用三张图片,第一张放在开头,第三张放在结尾,用于激发读者的阅读兴趣(毕竟,报纸的开头和结尾是最容易被看到的);第二张,则是为了帮助读者理解相关内容。

可是作为无双风神,文文收集的照片实在是太多了,以至于一时半会儿处理不过来。按照惯例,文文找到了在一旁吃瓜的你,希望你能帮她解决困难。

题目描述

尽管图片非常多,但幸运的是,文文已经将它们排成了一列,从左到右分别编号为 \(1 \sim n\),文文选取的三张图片,应该是一个长度为 \(\bf 3\) 的子序列。(不妨设选取的照片的序号为 \(i,j,k\) ,则必须要有 \(i<j<k\) )。

此外,文文给每张照片定了一个吸引度 \(A_i\)大小 \(B_i\)

因为报纸版面太大会降低读者的兴趣,于是选定两张照片 \(i,k\) 后,规定必须选择最小的 \(B_j\)

形式化地说,规定 \(\psi(i,k) = A_i + A_k - \min(B_j)\),其中需要满足 \(i < j < k\)

摸清了照片价值的计算,文文会告诉你共 \(m\) 个操作,可以分为以下三种:

  • \(\colorbox{f0f0f0}{\verb!1 x y!}\) :照片的吸引度发生变化。文文要将 \(A_x\) 修改为 \(y\)

  • \(\colorbox{f0f0f0}{\verb!2 x y!}\) :照片的大小发生变化。文文要将 \(B_x\) 修改为 \(y\)

  • \(\colorbox{f0f0f0}{\verb!3 l r!}\) :文文打算利用素材库的第 \(l\) 到第 \(r\) 张中的图片,你要告诉她 \(\psi(x,y)\)最大值\(l\le x\le x+1<y \le r\) )。

输入格式

第一行两个整数 \(n,m\),分别表示照片数量和操作次数。

第二行 \(n\) 个整数,表示序列 \(A\),描述每张照片的吸引度。

第三行 \(n\) 个整数,表示序列 \(B\),描述每张照片的大小。

接下来 \(m\) 行,每行描述一个操作,格式如上所述。

输出格式

对于每个操作三,输出一行一个整数,表示答案。

输入输出样例 #1

输入 #1

6 6
1 4 2 3 5 6
5 3 4 1 6 7
3 2 5
3 1 6
1 2 3
3 1 6
2 6 1
3 1 6

输出 #1

8
9
8
8

说明/提示

数据范围及约定

\[\def\arraystretch{1.5} \begin{array}{|c|c|c|c|}\hline \textbf{Subtask} & \bm{n,m} & \textbf{特殊性质} & \textbf{分值}\cr\hline 1 & 1\le n,m\le 300 & \text{无} & 10\cr\hline 2 & 1\le n,m\le 5\times 10^3 & \text{无} & 20\cr\hline 3 & 1\le n,m\le 5\times 10^5 & \text{仅有操作 3} & 20\cr\hline 4 & 1\le n,m\le 10^5 & \text{无} & 20\cr\hline 5 & \text{无特殊限制} & \text{无} & 30\cr\hline \end{array} \]

  • 对于 \(100\%\) 的数据:

    \(1 \le n,m \le 5 \times 10^5\)

    \(1 \leq A_i,B_i,y \leq 10^8\)\(1 \le x \le n\)\(1 \le l \le r \le n\)

    保证 \(r-l+1 \geq 3\),即询问的区间长度大于等于 \(3\)

#include<bits/stdc++.h>
#define wk(x) write(x),putchar(' ')
#define wh(x) write(x),putchar('\n')
#define int long long
#define mod 998244353
#define L (p<<1)
#define R (L|1)
#define MID ((l+r)>>1)
#define N 500005using namespace std;
int n,m,k,jk,ans,sum,num,cnt,tot;
int head[N],dis[N],vis[N],wis[N],f[N];void read(int &x)
{x=0;int ff=1;char ty;ty=getchar();while(!(ty>='0'&&ty<='9')){if(ty=='-') ff=-1;ty=getchar();}while(ty>='0'&&ty<='9')x=(x<<3)+(x<<1)+ty-'0',ty=getchar();x*=ff;return;
}void write(int x)
{if(x==0){putchar('0');return;}if(x<0){x=-x;putchar('-');}char asd[201];int ip=0;while(x) asd[++ip]=x%10+'0',x/=10;for(int i=ip;i>=1;i--) putchar(asd[i]);return;
}struct TT{int sum,maxl,maxr,MAXA,MINB;TT(){sum=maxl=maxr=MAXA=MINB=-1e18;}void F(){sum=maxl=maxr=MAXA=MINB=-1e18;}
}T[N<<2],Y[N][3];struct P{	void push(int p){T[p].MINB=min(T[L].MINB,T[R].MINB);T[p].MAXA=max(T[L].MAXA,T[R].MAXA);T[p].maxl=max(T[L].maxl,T[R].maxl);T[p].maxl=max(T[p].maxl,T[L].MAXA-T[R].MINB);T[p].maxr=max(T[L].maxr,T[R].maxr);T[p].maxr=max(T[p].maxr,T[R].MAXA-T[L].MINB);T[p].sum=max(max(T[L].sum,T[R].sum),max(T[L].MAXA+T[R].maxr,T[R].MAXA+T[L].maxl));return;}void build(int p,int l,int r){if(l==r){T[p].MAXA=dis[l];T[p].MINB=vis[l];T[p].sum=T[p].maxl=T[p].maxr=-1e18;return;}build(L,l,MID);build(R,MID+1,r);push(p);}void Get(int p,int l,int r,int x){if(l==r){T[p].MAXA=dis[l];T[p].MINB=vis[l];T[p].sum=T[p].maxl=T[p].maxr=-1e18;return;}if(MID>=x) Get(L,l,MID,x);else Get(R,MID+1,r,x);push(p);}TT qry(int p,int l,int r,int x,int y){if(x<=l&&r<=y) return T[p];int X=++cnt;Y[X][1].F();Y[X][2].F();Y[X][3].F(); if(MID>=x) Y[X][1]=qry(L,l,MID,x,y);if(MID<y) Y[X][2]=qry(R,MID+1,r,x,y);if(Y[X][1].MINB==-1e18) return Y[X][2];if(Y[X][2].MINB==-1e18) return Y[X][1];Y[X][3].MINB=min(Y[X][1].MINB,Y[X][2].MINB);Y[X][3].MAXA=max(Y[X][1].MAXA,Y[X][2].MAXA);Y[X][3].maxl=max(Y[X][1].maxl,Y[X][2].maxl);Y[X][3].maxl=max(Y[X][3].maxl,Y[X][1].MAXA-Y[X][2].MINB);Y[X][3].maxr=max(Y[X][1].maxr,Y[X][2].maxr);Y[X][3].maxr=max(Y[X][3].maxr,Y[X][2].MAXA-Y[X][1].MINB);Y[X][3].sum=max(max(Y[X][1].sum,Y[X][2].sum),max(Y[X][1].MAXA+Y[X][2].maxr,Y[X][2].MAXA+Y[X][1].maxl));return Y[X][3];}
}G;signed main()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);read(n),read(m);for(int i=1;i<=n;i++) read(dis[i]);for(int i=1;i<=n;i++) read(vis[i]);G.build(1,1,n);while(m--){int x,y,op;read(op),read(x),read(y);if(op==1) dis[x]=y,G.Get(1,1,n,x);else if(op==2) vis[x]=y,G.Get(1,1,n,x);else cnt=0,wh(G.qry(1,1,n,x,y).sum);}return 0;
}
http://www.gsyq.cn/news/158034.html

相关文章:

  • EasyGBS如何运用流媒体技术提升安防监控效率?
  • 网络阻塞问题分析二
  • 昆明婚纱摄影推荐星级排名新鲜出炉:昆明三大优质机构深度测评+避坑指南 - charlieruizvin
  • 常用查询
  • 【QOwnNotes】安装笔记
  • 2025电动叉车厂家哪个好指南:高性价比品牌梯队 - 栗子测评
  • 2025年新疆口碑不错的西点学校排名:西点学校哪家好? - mypinpai
  • 2025离心机选购建议:离心机国产哪家好?哪家性价比高/质量好?国产替代选哪家? - 品牌推荐大师1
  • 2025 年 12 月苏州企业数字化服务商推荐:外贸建站,网站制作与优化,短视频运营,ai优化,阿里巴巴运营等专业团队助力品牌线上增长! - 五色鹿五色鹿
  • grpc 使用学习笔记 url
  • 2025年上海实力强的猎头专业公司排行榜,新测评有名的猎头品牌企业推荐 - 工业推荐榜
  • 35岁+职业危机?月薪45K起的AI大模型新兴岗位,抓住机遇,逆袭职场!
  • 企业级教学辅助系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • Open-AutoGLM网页怎么用才能最大化效能?答案就在这8个关键步骤
  • 为什么你的手机跑不动Open-AutoGLM?深度剖析配置失败的5大原因
  • SpringBoot+Vue 教学资源共享平台平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • AcWing 3710:递进数字 ← 数位DP + 南京大学考研机试题
  • Open-AutoGLM网页实战技巧,掌握这6个功能让你效率提升300%
  • 【智能体Manus沉思录】:Open-AutoGLM核心技术解密与未来AI演进路径
  • 为什么顶尖AI工程师都在关注智谱Open-AutoGLM电脑?真相令人震惊
  • Open-AutoGLM网页怎么用才正确?3个常见误区你可能正在犯
  • MySQL 面试八股文总结(2025最新版)
  • 类加载器的介绍
  • 钢材拉弯哪家生产厂效率高、选哪家好、哪家售后好全解析 - myqiye
  • 2025年甲醛检测机构推荐,专业甲醛检测个性化定制机构全解析 - 工业推荐榜
  • 手机也能跑AutoGLM?一文解锁智谱开源模型本地化配置秘技
  • Chrome的cookie编辑插件EditThisCookie
  • 2025年液压中心架推荐供应商排行榜,RX型重型液压中心架制造商专业测评精选推荐 - myqiye
  • 学长亲荐10个AI论文软件,本科生论文写作必备!
  • 为什么你的Open-AutoGLM在macOS上跑不起来?90%的人都忽略了这3个核心依赖