博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UOJ228:基础数据结构练习题——题解
阅读量:5808 次
发布时间:2019-06-18

本文共 2070 字,大约阅读时间需要 6 分钟。

参考:

考虑当整个区间的最大值开方==最小值开方(实质上就是区间开完方后所有数都相等),那么我们开一次方就可以了。

听说有证明如果达到上面的那种情况的话最多需要操作O(lg^2)次,那么复杂度就是O(n*lg^3)了。

实际上开方只是起到了一个缩小最大值和最小值差值的作用,当差值缩小为0时就是我们所想要的那种情况。

但是也有极端数据比如898989,开完方变成343434……无限下去你就会发现无论怎么开所有的数都会差1,复杂度瞬间被艹。

对于这种极端数据实际上只是进行了一次区间减,我们特判之就能保证复杂度了。

另外为了减少代码编写难度,采用了参考的那种只有当最大值==最小值才开方的写法,虽然最好情况下复杂度会增加,但是最坏情况复杂度并没有增加,所以没有问题。

#include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int N=1e5+5;inline ll read(){ ll X=0,w=0;char ch=0; while(!isdigit(ch)){w|=ch=='-';ch=getchar();} while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar(); return w?-X:X;}int n,m;ll b[N],sum[N*4],ad[N*4],maxn[N*4],minn[N*4];inline void mdy(int a,int l,int r,ll w){ sum[a]+=w*(r-l+1); maxn[a]+=w;minn[a]+=w; ad[a]+=w;}inline void upt(int a,int l,int r){ int ls=a<<1,rs=a<<1|1; sum[a]=sum[ls]+sum[rs]+ad[a]*(r-l+1); maxn[a]=max(maxn[ls],maxn[rs])+ad[a]; minn[a]=min(minn[ls],minn[rs])+ad[a];}void build(int a,int l,int r){ if(l==r){ sum[a]=maxn[a]=minn[a]=b[l]; return; } int mid=(l+r)>>1; build(a<<1,l,mid);build(a<<1|1,mid+1,r); upt(a,l,r);}void seg_add(int a,int l,int r,int l1,int r1,ll w){ if(r
>1; seg_add(a<<1,l,mid,l1,r1,w);seg_add(a<<1|1,mid+1,r,l1,r1,w); upt(a,l,r);}void seg_sqrt(int a,int l,int r,int l1,int r1,ll w){ if(r
>1;w+=ad[a]; seg_sqrt(a<<1,l,mid,l1,r1,w);seg_sqrt(a<<1|1,mid+1,r,l1,r1,w); upt(a,l,r);}ll query(int a,int l,int r,int l1,int r1,ll w){ if(r
>1;w+=ad[a]; return query(a<<1,l,mid,l1,r1,w)+query(a<<1|1,mid+1,r,l1,r1,w);}int main(){ n=read(),m=read(); for(int i=1;i<=n;i++)b[i]=read(); build(1,1,n); while(m--){ int op=read(),x=read(),y=read(); if(op==1)seg_add(1,1,n,x,y,read()); if(op==2)seg_sqrt(1,1,n,x,y,0); if(op==3)printf("%lld\n",query(1,1,n,x,y,0)); } return 0;}

+++++++++++++++++++++++++++++++++++++++++++

 +本文作者:luyouqi233。               +

 +欢迎访问我的博客:+

+++++++++++++++++++++++++++++++++++++++++++

转载于:https://www.cnblogs.com/luyouqi233/p/9154111.html

你可能感兴趣的文章
1 Android环境搭建
查看>>
【许晓笛】EOS 系统架构图解
查看>>
Spring中XML,注解,JavaConfig如何选择
查看>>
搭建JEESZ分布式架构1--CentOs下安装jdk7(环境准备)
查看>>
数据更新| Qtum 量子链全球大使招募计划
查看>>
小程序初探之三-一个定位bug
查看>>
分布式锁的解决方案(二)
查看>>
如何写出一个好的单例模式
查看>>
Python urllib HTTP头注入漏洞
查看>>
类的设计-使可变性最小
查看>>
三、Android性能优化之常见的内存泄漏分析
查看>>
决战性能之巅 - Taro H5 转换与优化升级
查看>>
iOS逆向之旅(进阶篇) — 代码注入
查看>>
大数据的知识体系
查看>>
马云宣布传承计划,回归教育
查看>>
Python 比特币 教程 之一:创建机器人
查看>>
WinRAR存在严重的安全漏洞影响5亿用户
查看>>
JVM执行方法调用(一)- 重载与重写
查看>>
Mysql-InnoDB 锁学习
查看>>
破境Angular(二)Angular构件
查看>>