题目链接: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. 基础数据结构练习题(线段树区间开方)的更多相关文章

  1. uoj #228. 基础数据结构练习题 线段树

    #228. 基础数据结构练习题 统计 描述 提交 自定义测试 sylvia 是一个热爱学习的女孩子,今天她想要学习数据结构技巧. 在看了一些博客学了一些姿势后,她想要找一些数据结构题来练练手.于是她的 ...

  2. UOJ #228. 基础数据结构练习题 线段树 + 均摊分析 + 神题

    题目链接 一个数被开方 #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",st ...

  3. 【线段树】uoj#228. 基础数据结构练习题

    get到了标记永久化 sylvia 是一个热爱学习的女孩子,今天她想要学习数据结构技巧. 在看了一些博客学了一些姿势后,她想要找一些数据结构题来练练手.于是她的好朋友九条可怜酱给她出了一道题. 给出一 ...

  4. 【UOJ#228】基础数据结构练习题 线段树

    #228. 基础数据结构练习题 题目链接:http://uoj.ac/problem/228 Solution 这题由于有区间+操作,所以和花神还是不一样的. 花神那道题,我们可以考虑每个数最多开根几 ...

  5. uoj#228 基础数据结构练习题

    题面:http://uoj.ac/problem/228 正解:线段树. 我们可以发现,开根号时一个区间中的数总是趋近相等.判断一个区间的数是否相等,只要判断最大值和最小值是否相等就行了.如果这个区间 ...

  6. 【uoj#228】基础数据结构练习题 线段树+均摊分析

    题目描述 给出一个长度为 $n$ 的序列,支持 $m$ 次操作,操作有三种:区间加.区间开根.区间求和. $n,m,a_i\le 100000$ . 题解 线段树+均摊分析 对于原来的两个数 $a$ ...

  7. uoj#228. 基础数据结构练习题(线段树)

    传送门 只有区间加区间开方我都会--然而加在一起我就gg了-- 然后这题的做法就是对于区间加直接打标记,对于区间开方,如果这个区间的最大值等于最小值就直接区间覆盖(据ljh_2000大佬说这个区间覆盖 ...

  8. UOJ #228 - 基础数据结构练习题(势能线段树+复杂度分析)

    题面传送门 神仙题. 乍一看和经典题 花神游历各国有一点像,只不过多了一个区间加操作.不过多了这个区间加操作就无法再像花神游历各国那样暴力开根直到最小值为 \(1\) 为止的做法了,稍微感性理解一下即 ...

  9. [UOJ228] 基础数据结构练习题 - 线段树

    考虑到一个数开根号 \(loglog\) 次后就会变成1,设某个Node的势能为 \(loglog(maxv-minv)\) ,那么一次根号操作会使得势能下降 \(1\) ,一次加操作最多增加 \(l ...

随机推荐

  1. bing搜索引擎子域名收集(Python脚本)

    利用bing搜索引擎进行子域名收集,编写了一个简单的Python脚本,分享一下. #! /usr/bin/env python # _*_ coding:utf-8 _*_ import reques ...

  2. [Python]小百合十大爬虫

    国庆几天在家看了几篇关于使用Python来编写网络爬虫的博客,想来自己断断续续学习Python也有几个月了,但一个像样的程序都没有写过,编程能力并没有得到提高,愧对自己花费的时间.很多时候虽然知道什么 ...

  3. 使用Xcode自带的单元测试

    今年苹果推出的iOS8和Swift的新功能让人兴奋.同时,苹果对于Xcode的测试工具的改进却也会影响深远.现在我们来看下XCTest,Xcode内置的测试框架.以及,Xcode6新增的XCTestE ...

  4. mybatis 之 resultType="Map" parameterType="String"

    <select id="getAllGoodsForSouJiaYi" resultType="Map" parameterType="Stri ...

  5. mybais 之parameterType ="list"

    <!-- 根据货品编号获取商品价格和库存 --> <select id="getGoodsPriceAndStockByGoodsNo" resultMap=&q ...

  6. api 25 PopupWindow会占据整个屏幕

    解决方法:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { // Android 7.x中,PopupWindow高度为match_pa ...

  7. code_blocks 使用操作手册

                                                                              38 39 编译以上程序,产生如下提示信息. 如此简 ...

  8. 微信小程序连续动画

    <view animation="{{animationData}}" style="background:red;height:100rpx;width:100r ...

  9. Linux配置示例:配置java环境变量

    1.修改/etc/profile文件   如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题. (1)用文本编辑器打开/etc ...

  10. ECMAScript 面向对象JS学习笔记1

    1.对象的 prototype 属性,可以把它看成创建新对象所依赖的原型.===在我理解,就是prototype下设置的字段是唯一性的,共享性的,不管创建多少个对象,所处空间都是不变的,没有增加也没有 ...