uoj#228. 基础数据结构练习题(线段树区间开方)
题目链接:http://uoj.ac/problem/228
代码:(先开个坑在这个地方)
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
long long a[N];
struct node{
int l,r;
long long maxx,minn,sum;
long long lazy;
void up(long long val){
maxx+=val;minn+=val;sum+=(r-l+)*1ll*val;
lazy+=val;
}
}tree[*N];
void push_up(int x){
tree[x].maxx=max(tree[x<<].maxx,tree[x<<|].maxx);
tree[x].minn=min(tree[x<<].minn,tree[x<<|].minn);
tree[x].sum=tree[x<<].sum+tree[x<<|].sum;
}
void push_down(int x){
long long val=tree[x].lazy;
if(val){
tree[x<<].up(val);
tree[x<<|].up(val);
tree[x].lazy=;
}
}
void build(int x,int l,int r){
tree[x].l=l; tree[x].r=r;
tree[x].lazy=tree[x].sum=;
if(l==r){
tree[x].minn=tree[x].maxx=tree[x].sum=a[l];
return;
}
int m=(l+r)/;
build(x<<,l,m);
build(x<<|,m+,r);
push_up(x);
}
void updata(int x,int l,int r,long long val){
int L=tree[x].l,R=tree[x].r;
if(l<=L&&R<=r){
tree[x].up(val);return;
}
int m=(L+R)/;
push_down(x);
if(l<=m) updata(x<<,l,r,val);
if(r>m) updata(x<<|,l,r,val);
push_up(x);
}
void Sqrt(int x,int l,int r){
push_down(x);
int L=tree[x].l,R=tree[x].r;
if(l<=L&&R<=r){
if(tree[x].maxx==tree[x].minn){
long long t=(long long)sqrt(tree[x].maxx);
updata(x,L,R,t-tree[x].maxx);
return;
}
else if(tree[x].minn+==tree[x].maxx){
long long t1=(long long)sqrt(tree[x].minn);
long long t2=(long long)sqrt(tree[x].maxx);
if(t1+==t2){
updata(x,L,R,t2-tree[x].maxx);
return;
}
}
}
int m=(L+R)/;
if(l<=m) Sqrt(x<<,l,r);
if(r>m) Sqrt(x<<|,l,r);
push_up(x);
}
long long query(int x,int l,int r){
push_down(x);
int L=tree[x].l,R=tree[x].r;
if(l<=L&&R<=r){
return tree[x].sum;
}
int m=(L+R)/;
long long ans=;
if(l<=m) ans+=query(x<<,l,r);
if(r>m) ans+=query(x<<|,l,r);
push_up(x);
return ans;
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%lld",&a[i]);
build(,,n);
while(m--){
int op,l,r;
scanf("%d%d%d",&op,&l,&r);
if(op==){
long long val;
scanf("%lld",&val);
updata(,l,r,val);
}
else if(op==){
Sqrt(,l,r);
}
else{
printf("%lld\n",query(,l,r));
}
}
return ;
}
uoj#228. 基础数据结构练习题(线段树区间开方)的更多相关文章
- uoj #228. 基础数据结构练习题 线段树
#228. 基础数据结构练习题 统计 描述 提交 自定义测试 sylvia 是一个热爱学习的女孩子,今天她想要学习数据结构技巧. 在看了一些博客学了一些姿势后,她想要找一些数据结构题来练练手.于是她的 ...
- UOJ #228. 基础数据结构练习题 线段树 + 均摊分析 + 神题
题目链接 一个数被开方 #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",st ...
- 【线段树】uoj#228. 基础数据结构练习题
get到了标记永久化 sylvia 是一个热爱学习的女孩子,今天她想要学习数据结构技巧. 在看了一些博客学了一些姿势后,她想要找一些数据结构题来练练手.于是她的好朋友九条可怜酱给她出了一道题. 给出一 ...
- 【UOJ#228】基础数据结构练习题 线段树
#228. 基础数据结构练习题 题目链接:http://uoj.ac/problem/228 Solution 这题由于有区间+操作,所以和花神还是不一样的. 花神那道题,我们可以考虑每个数最多开根几 ...
- uoj#228 基础数据结构练习题
题面:http://uoj.ac/problem/228 正解:线段树. 我们可以发现,开根号时一个区间中的数总是趋近相等.判断一个区间的数是否相等,只要判断最大值和最小值是否相等就行了.如果这个区间 ...
- 【uoj#228】基础数据结构练习题 线段树+均摊分析
题目描述 给出一个长度为 $n$ 的序列,支持 $m$ 次操作,操作有三种:区间加.区间开根.区间求和. $n,m,a_i\le 100000$ . 题解 线段树+均摊分析 对于原来的两个数 $a$ ...
- uoj#228. 基础数据结构练习题(线段树)
传送门 只有区间加区间开方我都会--然而加在一起我就gg了-- 然后这题的做法就是对于区间加直接打标记,对于区间开方,如果这个区间的最大值等于最小值就直接区间覆盖(据ljh_2000大佬说这个区间覆盖 ...
- UOJ #228 - 基础数据结构练习题(势能线段树+复杂度分析)
题面传送门 神仙题. 乍一看和经典题 花神游历各国有一点像,只不过多了一个区间加操作.不过多了这个区间加操作就无法再像花神游历各国那样暴力开根直到最小值为 \(1\) 为止的做法了,稍微感性理解一下即 ...
- [UOJ228] 基础数据结构练习题 - 线段树
考虑到一个数开根号 \(loglog\) 次后就会变成1,设某个Node的势能为 \(loglog(maxv-minv)\) ,那么一次根号操作会使得势能下降 \(1\) ,一次加操作最多增加 \(l ...
随机推荐
- 在SSH框架中,如何得到POST请求的URL和参数列表
在做项目的API通知接口的时候,发现在SSH框架中无法获取到对方服务器发来的异步通知信息.最后排查到的原因可能是struts2对HttpServletRequest进行了二次处理,那么该如何拿到pos ...
- ios开发之--UIButton中imageView和titleLabel的位置调整
在使用UIButton时,有时候需要调整按钮内部的imageView和titleLabel的位置和尺寸.在默认情况下,按钮内部的imageView和titleLabel的显示效果是图片在左文字在右,然 ...
- 打破基于OpenResty的WEB安全防护(CVE-2018-9230)
原文首发于安全客,原文链接:https://www.anquanke.com/post/id/103771 0x00 前言 OpenResty® 是一个基于 Nginx 与 Lua 的高性能 We ...
- iOS开发-iOS7禁用手势返回
- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // 禁用 iOS7 返回手势 if ([self.nav ...
- Git 学习笔记--git 查看某个文件的修改历史
1. git log -p filename 查看文件的每一个详细的历史修改,如果没有-p选项,只显示提交记录,不显示文件内容修改,git log -p -3 filename 显示最近的3次提交. ...
- css媒体查询来书写二倍图三倍图设置
@media (-webkit-min-device-pixel-ratio: 2){} @media (-webkit-min-device-pixel-ratio: 3){}
- C#实现HTTP请求文件下载,GET、POST请求的数据流接收
做项目的时候由于插件Phaser请求audio的时候,不允许跨域,具体提示====> 已拦截跨源请求:同源策略禁止读取位于 http://ttyouni.com/1.mp3 的远程资源.(原因: ...
- 树莓派3b 串口通信初次尝试
准备工作: 1. 安装wiringPi 2. 修改config.txt sudo nano /boot/config.txt 在文件的末尾添加: dtoverlay=pi3-miniuart-bt 3 ...
- Word 2010 插入其他文件的方法
1. 2.
- 如何区分一个系统是redhat centos ubuntu fedora debian中的哪一种
一.问题概述 有时候拿到一个环境,我们并不清楚是什么系统,是redhat啊,还是centos呢,是centos 6呢,还是centos 7呢. 这里参考了一篇博文: https://www.cnblo ...