题目链接: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. SQLServer------基本操作

    代码: --新增字段 ) --编辑字段名称 --注意: 更改对象名的任一部分都可能会破坏脚本和存储过程 EXEC sp_rename 'FTTxUser.[Modifiersss]','Creator ...

  2. grid网格的流动定位

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. The import XXX cannot be resolved

    选择project --> clean后,OK.如果还不行,删掉全部import,然后按alt+/提示,逐个导入.

  4. CentOS安装、配置RabbitMQ

    安装步骤(rpm包安装): rpm安装官网:http://www.rabbitmq.com/install-rpm.html 下载rpm并安装: CentOs: wget http://www.rab ...

  5. Nginx(八)-- 负载均衡

    1.概念 负载均衡 建立在现有的网络结构上,提供一种廉价有效透明的方法来扩大网络设置和服务器的带宽.增加吞吐量.加强网络数据处理能力,以及提供网络的灵活性和可用性. 用得较多的负载均衡器硬件有F5 B ...

  6. 使用 Splash

    Splash 简介与安装 Splash Lua 脚本 Splash 对象属性 Splash 对象方法 Splash API 调用 Splash 负载均衡

  7. IOS音频1:之采用四种方式播放音频文件(一)AudioToolbox AVFoundation OpenAL AUDIO QUEUE

    本文转载至 http://blog.csdn.net/u014011807/article/details/40187737 在本卷你可以学到什么? 采用四种方法设计应用于各种场合的音频播放器: 基于 ...

  8. PyQt4程序图标

    程序图标就是一个小图片,通常显示在程序图标的左上角(ubuntu gnome在最上侧). #!/usr/bin/python # -*- coding:utf-8 -*- import sys fro ...

  9. hive报错: Specified key was too long; max key length is 767 bytes

    废话不多说,报错如下: DataNucleus.Datastore (Log4JLogger.java:error(115)) - An exception was thrown while addi ...

  10. Win8应用开发 入门篇(三) UX交互导航模式

    导航模式(Windows 应用商店应用)   在本文中 分层模式 画布上导航 顶部应用栏 语义式缩放 相关主题 组织 Windows 应用商店应用中的内容,以便用户可以轻松而直观地进行导航.使用正确的 ...