loj#6029 「雅礼集训 2017 Day1」市场
时间:2019-10-30
本文章向大家介绍loj#6029 「雅礼集训 2017 Day1」市场,主要包括loj#6029 「雅礼集训 2017 Day1」市场使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
分析
就是线段树啊
至于除法就记录区间minmax看是不是相当于区间减即可
复杂度不会证明
就上网查根号势能分析把根号改成1/k就行啦
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int inf = 1e17+9;
int mn[400100],mx[400100],d[400100],n,m,a[100100],col[400100];
inline void build(int le,int ri,int wh){
if(le==ri){d[wh]=mn[wh]=mx[wh]=a[le];return;}
int mid=(le+ri)>>1;
build(le,mid,wh<<1),build(mid+1,ri,wh<<1|1);d[wh]=d[wh<<1]+d[wh<<1|1];
mn[wh]=min(mn[wh<<1],mn[wh<<1|1]);mx[wh]=max(mx[wh<<1],mx[wh<<1|1]);
}
inline void pushdown(int wh,int le,int mid,int ri){
if(!col[wh])return;
int k=col[wh];
d[wh<<1]+=(mid-le+1)*k;
d[wh<<1|1]+=(ri-mid)*k;
mn[wh<<1]+=k,mn[wh<<1|1]+=k;
mx[wh<<1]+=k,mx[wh<<1|1]+=k;
col[wh<<1]+=k,col[wh<<1|1]+=k;
col[wh]=0;
}
inline int qmin(int le,int ri,int wh,int x,int y){
if(le>=x&&ri<=y)return mn[wh];
int mid=(le+ri)>>1,ans=inf;
pushdown(wh,le,mid,ri);
if(mid>=x)ans=min(ans,qmin(le,mid,wh<<1,x,y));
if(mid<y)ans=min(ans,qmin(mid+1,ri,wh<<1|1,x,y));
return ans;
}
inline int qsum(int le,int ri,int wh,int x,int y){
if(le>=x&&ri<=y)return d[wh];
int mid=(le+ri)>>1,ans=0;
pushdown(wh,le,mid,ri);
if(mid>=x)ans+=qsum(le,mid,wh<<1,x,y);
if(mid<y)ans+=qsum(mid+1,ri,wh<<1|1,x,y);
return ans;
}
inline void update(int le,int ri,int wh,int x,int y,int k){
if(le>=x&&ri<=y){
col[wh]+=k;
mn[wh]+=k;
mx[wh]+=k;
d[wh]+=k*(ri-le+1);
return;
}
int mid=(le+ri)>>1;
pushdown(wh,le,mid,ri);
if(mid>=x)update(le,mid,wh<<1,x,y,k);
if(mid<y)update(mid+1,ri,wh<<1|1,x,y,k);
mn[wh]=min(mn[wh<<1],mn[wh<<1|1]);
mx[wh]=max(mx[wh<<1],mx[wh<<1|1]);
d[wh]=d[wh<<1]+d[wh<<1|1];
return;
}
inline int getdiv(int x,int y){return x>=0?x/y:((x+1)/y-1);}
inline void updiv(int le,int ri,int wh,int x,int y,int k){
if(le>=x&&ri<=y&&(mx[wh]-getdiv(mx[wh],k)==mn[wh]-getdiv(mn[wh],k))){
int a=mx[wh]-getdiv(mx[wh],k);
col[wh]-=a;
mn[wh]-=a;
mx[wh]-=a;
d[wh]-=a*(ri-le+1);
return;
}
int mid=(le+ri)>>1;
pushdown(wh,le,mid,ri);
if(mid>=x)updiv(le,mid,wh<<1,x,y,k);
if(mid<y)updiv(mid+1,ri,wh<<1|1,x,y,k);
mn[wh]=min(mn[wh<<1],mn[wh<<1|1]);
mx[wh]=max(mx[wh<<1],mx[wh<<1|1]);
d[wh]=d[wh<<1]+d[wh<<1|1];
return;
}
signed main(){
int i,j,k,le,ri,x;
cin>>n>>m;
for(i=1;i<=n;i++)scanf("%lld",&a[i]);
build(1,n,1);
while(m--){
scanf("%lld%lld%lld",&k,&le,&ri);
le++,ri++;
if(k==1||k==2)scanf("%lld",&x);
if(k==1)update(1,n,1,le,ri,x);
if(k==2)updiv(1,n,1,le,ri,x);
if(k==3)printf("%lld\n",qmin(1,n,1,le,ri));
if(k==4)printf("%lld\n",qsum(1,n,1,le,ri));
}
return 0;
}
原文地址:https://www.cnblogs.com/yzxverygood/p/11764768.html
- YOLO算法的原理与实现
- Batchnorm原理详解
- 【动手实践】Oracle 12.2 新特性:自动的列表分区创建
- AI从业者搞懂---这10种深度学习方法---老婆孩子热炕头
- OpenCV从零基础---检测及分割图像的目标区域
- Spark资源调优
- Tensorflow实战:Discuz验证码识别
- 【动手实践】:Lockdown Profile 的多租户权限控制
- 异步的JavaScript和XML(AJAX)
- JavaScript实现登录注册验证
- jQuery右侧滑动快速导航条
- PHPExcel 表格导入数据代码解析(二)
- php Array数组知识总结
- 抓取远程图片到本地,你会用什么函数?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅谈OpenCV中的新函数connectedComponentsWithStats用法
- Python根据指定文件生成XML的方法
- python如何调用java类
- Python pytesseract验证码识别库用法解析
- python 读txt文件,按‘,’分割每行数据操作
- PHP利用递归函数实现无限级分类的方法
- 详解关于php的xdebug配置(编辑器vscode)
- PHP应用跨时区功能的实现方法
- PHP实现的数据对象映射模式详解
- PDO::beginTransaction讲解
- PHP匿名函数(闭包函数)详解
- PDO::getAttribute讲解
- PHP压缩图片功能的介绍
- PHP+RabbitMQ实现消息队列的完整代码
- Pytorch 高效使用GPU的操作