CF1136E Nastya Hasn‘t Written a Legend

2023-10-27 15:10

本文主要是介绍CF1136E Nastya Hasn‘t Written a Legend,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

R e s u l t Result Result

...


H y p e r l i n k Hyperlink Hyperlink

https://www.luogu.com.cn/problem/CF1136E


D e s c r i p t i o n Description Description

给定一个长度为 n n n的数组 a a a和长度为 n − 1 n-1 n1的数组 k k k m m m次询问
包含两种操作

  1. a x + = y a_x+=y ax+=y,同时若加完之后 a i + 1 < a i + a k a_{i+1}<a_i+a_k ai+1<ai+ak,则令 a i + 1 = a i + a k a_{i+1}=a_i+a_k ai+1=ai+ak,同时继续判断 a i + 2 < 更 新 后 的 a i + 1 + a k + 1 a_{i+2}<更新后的a_{i+1}+a_{k+1} ai+2<ai+1+ak+1,然后赋值 a i + 2 = 更 新 后 的 a i + 1 + a k + 1 a_{i+2}=更新后的a_{i+1}+a_{k+1} ai+2=ai+1+ak+1,以此类推,直到不合法为止
  2. 查询 a [ x ∼ y ] a[x\sim y] a[xy]的和

数据范围: n , m ≤ 1 0 5 , ∣ a i ∣ , ∣ k i ∣ ≤ 1 0 9 n,m\leq 10^5,|a_i|,|k_i|\leq 10^9 n,m105,ai,ki109


S o l u t i o n Solution Solution

考虑什么时候满足题目所述条件
a i ≥ a i − 1 + k i − 1 ≥ a i − 2 + k i − 2 + k i − 1 ≥ a j + ∑ l = j i − 1 k l ∣ j < i a_i\geq a_{i-1}+k_{i-1}\geq a_{i-2}+k_{i-2}+k_{i-1}\geq a_j+\sum _{l=j}^{i-1} k_l\ |\ j<i aiai1+ki1ai2+ki2+ki1aj+l=ji1kl  j<i

g i = ∑ j = 1 i k i g_i=\sum_{j=1}^i k_i gi=j=1iki

a i ≥ a 1 + g i − 1 a_i\geq a_1+g_{i-1} aia1+gi1,貌似有用,但因为 k i k_i ki可以是负数,所以不是很有用

但我们可以让 u i = a i − g i − 1 u_i=a_i-g_{i-1} ui=aigi1
a i ≥ a i − 1 + k i − 1 a_i\geq a_{i-1}+k_{i-1} aiai1+ki1
a i − g i − 1 ≥ a i − 1 − g i − 2 + k i − 1 a_{i}-g_{i-1}\geq a_{i-1}-g_{i-2}+k_{i-1} aigi1ai1gi2+ki1

u i ≥ u i − 1 u_i\geq u_{i-1} uiui1

u i u_i ui单调不降,所以我们可以用线段树维护一个 u i u_i ui

对于修改操作,只需二分一个断点,然后区间赋值
对于查询操作,只需要查询区间 u i u_i ui的和,然后补上多减的 g g g,后者可以预处理 g g g的前缀和实现

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


C o d e Code Code
#include<cctype>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
#define N 100010
using namespace std;int n,m;
LL a[N],k[N],g[N],x,y,s[N];
char op[10];
struct xds 
{#define lson k<<1#define rson k<<1|1#define mid (l+r>>1)#define gol lson,l,mid#define gor rson,mid+1,rLL dat[N<<2],lzy[N<<2];inline void build(int k=1,int l=1,int r=n){lzy[k]=-9e18;if(l==r) return (void)(dat[k]=a[l]-g[l-1]);build(gol);build(gor);return (void)(dat[k]=dat[lson]+dat[rson]);}inline void reset(int k,int l,int r,LL x){return (void)(lzy[k]=x,dat[k]=(r-l+1)*x);}inline void pushdown(int k,int l,int r){if(lzy[k]!=-9e18) reset(gol,lzy[k]),reset(gor,lzy[k]),lzy[k]=-9e18;return;}inline LL Query(int ql,int qr,int k=1,int l=1,int r=n){if(l>qr||r<ql) return 0;if(ql<=l&&qr>=r) return dat[k];pushdown(k,l,r);return Query(ql,qr,gol)+Query(ql,qr,gor);}inline void Modify(int ql,int qr,LL x,int k=1,int l=1,int r=n){if(l>qr||r<ql) return;if(ql<=l&&qr>=r) return (void)(reset(k,l,r,x));pushdown(k,l,r);Modify(ql,qr,x,gol);Modify(ql,qr,x,gor);return (void)(dat[k]=dat[lson]+dat[rson]);}#undef lson#undef rson#undef mid#undef gol#undef gor
}T;
inline LL read()
{char c;LL d=1,f=0;while(c=getchar(),!isdigit(c)) if(c=='-') d=-1;f=(f<<3)+(f<<1)+c-48;while(c=getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;return d*f;
}
signed main()
{n=read();for(register int i=1;i<=n;i++) a[i]=read();for(register int i=1;i<n;i++) g[i]=g[i-1]+read(),s[i]=s[i-1]+g[i];T.build();m=read();while(m--){scanf("%s",op);x=read();y=read();if(op[0]=='s') printf("%lld\n",T.Query(x,y)+s[max(0ll,y-1)]-s[max(0ll,x-2)]);else{int l=x,r=n,mid;LL v=T.Query(x,x)+y;while(l<=r){int mid=l+r>>1;LL k=T.Query(mid,mid);if(k==v) break;if(k>v) r=mid-1;else l=mid+1;}T.Modify(x,l+r>>1,v);}}
}

这篇关于CF1136E Nastya Hasn‘t Written a Legend的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/286477

相关文章

编译u-boot报错configuration written to .config

编译u-boot报错 1.报错显示 1.报错显示 ## configuration written to .config#scripts/kconfig/conf --silentoldconfig Kconfig*** Error during update of the configuration.scripts/kconfig/Makefile:

基于Leaflet Legend的图例数据筛选实践-以某市教培时空分布为例

目录 前言 一、关于Leaflet.Legend组件 1、Legend组件的主要参数 2、相关参数 二、Legend图例可视化控制 1、违规教培信息的管理 2、违规培训信息时空可视化及图例渲染控制   3、成果展示 三、总结 前言         在很多的地理时空分析系统中,我们经常会遇到一些需求。比如在地图中,我们会结合内容的分类来进行图例的展示,而图例不仅

【Matplotlib】(二)图例legend

Matplotlib 的 Legend 图例就是为了帮助我们展示每个数据对应的图像名称,更好的让读者认识到你的数据结构。 如图,红色标注部分就是 Legend 图例。 在之前的一篇文章 Matplotlib 系列之「绘制函数图像」 中已经细讲过 Matplotlib 的绘制过程以及结构分析,希望读者能先去了解一下。 接着上一次的代码继续讲解 Legend 图例如何展示,以及有哪些常用的特

echarts系列:echarts中的legend名称最上面被遮挡一部分

在 ECharts 中,遇到 legend 的名称在图表中被遮挡。 被遮挡的原因,通常是因为布局问题,可能涉及到 legend 的位置、尺寸或者是与其他组件的重叠。 通过排查问题,发现以下一些解决 legend 名称被遮挡的方案: 调整 Legend 的位置: 你可以通过改变 legend 的 top, bottom, left, right 属性来调整它的位置,以避免重叠。例如,如果 le

隐藏饼图的legend,重写legend列表。

因为要实现的饼图效果较复杂,所以,需要重新写列表。 点击右侧列表的圆点,实现隐藏左侧饼图相应环状。 <template><div class="index_div"><a-spin :spinning="aLoading"><scalescreen:width="1920":height="1080":selfAdaption="true"class="scale-wrap"><div c

echarts legend. icon的展示

默认展示 icon展示circle圆形rect矩形roundRect圆角矩形triangle三角形diamond菱形pin水滴arrow箭头none不显示

ftp连接服务器失败:响应:220-FileZilla Server version 0.9.24 beta 响应:220-written by Tim Kosse (Tim.Kosse@gmx.d

使用FTP客户端连接虚拟主机或轻云服务器的时候,从FTP操作记录中看到客户端在执行AUTH TLS命令后,提示“无法连接到服务器”的错误信息,具体内容如下图所示。 响应: 220-FileZilla Server version 0.9.24 beta 响应: 220-written by Tim Kosse (Tim.Kosse@gmx.de) 响应: 220 Please vi

echarts legend图例颜色不统一问题

项目里发现这种图片,线和圈圈颜色不统一 查看代码后发现,设置了公共的color, 并且只作用在了series里, 并没有作用在option全局里, 所以需要在option里添加color. const chartObj = {colors:['#49B3FF', '#26C89A']}option = {//echarts里的optioncolor: chartObj.colors,}

matplotlib学习笔记--Legend

legend 显示图例 1 legend基础 函数原型 legend(*args, **kwargs)  当len(args) == 2        args 是[artist]和[label]的集合 当len(args) == 0        args会自动调用get_legend_handles_labels()生成        等价于        h

echarts特殊处理(滚动条、legend分页、tooltip滚动)

当图表数据量过大时,为了使用者能够有更好的体验,对于大数据量的图表处理: 1、当x轴数据过多不能完全展示时,需要添加滚动条:option设置dataZoom字段 dataZoom: [{ // 这部分是关键,设置滚动条type: 'slider', // 使用 'slider' 类型的 dataZoom 组件start: 0, // 左侧在数据窗口范围的起始百分比, 0 表示从头开始e