洛谷P4145:https://www.luogu.org/problemnew/show/P4145

思路

这道题的重点在于sqrt(1)=1 一个限制条件

与正常线段树不同的是区间修改为开方

那么我们用一个数组记录每个区间的最大值 只有当这个区间的最大值大于1时才需要开方

因此 当我们更新到叶子节点时把每个区间的最大值和sum值开方即可

注意题目中说l可能大于r 要交换

代码

#include<iostream>
#include<cmath>
using namespace std;
#define ll long long
#define maxn 100010
ll sum[maxn<<],Max[maxn<<],a[maxn];
ll n,m;
void build(ll l,ll r,ll k)
{
if(l==r)
{
sum[k]=a[l];
Max[k]=sum[k];//叶子节点
return;
}
ll mid=(l+r)>>;
build(l,mid,k<<);
build(mid+,r,k<<|);
sum[k]=sum[k<<]+sum[k<<|];
Max[k]=max(Max[k<<],Max[k<<|]);//更新上层的值
return;
}
ll query(ll x,ll y,ll l,ll r,ll k)//常规询问
{
if(x<=l&&r<=y) return sum[k];
ll res=;
ll mid=(l+r)>>;
if(x<=mid) res+=query(x,y,l,mid,k<<);
if(y>mid) res+=query(x,y,mid+,r,k<<|);
return res;
}
void update(ll x,ll y,ll l,ll r,ll k)
{
if(l==r)//叶子节点时
{
sum[k]=sqrt(sum[k]);
Max[k]=sqrt(Max[k]);
return;
}
ll mid=(l+r)>>;
if(x<=mid&&Max[k<<]>) update(x,y,l,mid,k<<);//满足最大值大于1
if(y>mid&&Max[k<<|]>) update(x,y,mid+,r,k<<|);
sum[k]=sum[k<<]+sum[k<<|];//更新上层的值
Max[k]=max(Max[k<<],Max[k<<|]);
}
int main()
{
cin>>n;
for(ll i=;i<=n;i++) cin>>a[i];
build(,n,);
cin>>m;
for(ll i=;i<=m;i++)
{
ll k,l,r;
cin>>k>>l>>r;
if(l>r)//交换
{
int temp;
temp=l;
l=r;
r=temp;
}
if(k==)
{
update(l,r,,n,);
}
if(k==)
{
cout<<query(l,r,,n,)<<endl;
}
}
}

【题解】洛谷P4145 花神游历各国(线段树)的更多相关文章

  1. BZOJ 3211: 花神游历各国( 线段树 )

    线段树...区间开方...明显是要处理到叶节点的 之前在CF做过道区间取模...差不多, 只有开方, 那么每个数开方次数也是有限的(0,1时就会停止), 最大的数10^9开方10+次也就不会动了.那么 ...

  2. GSS4 - Can you answer these queries IV || luogu4145上帝造题的七分钟2 / 花神游历各国 (线段树)

    GSS4 - Can you answer these queries IV || luogu4145上帝造题的七分钟2 / 花神游历各国 GSS4 - Can you answer these qu ...

  3. bzoj3211 花神游历各国 线段树,势能分析

    [bzoj3211]花神游历各国 2014年3月17日2,7230 Description   Input   Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input ...

  4. bzoj3211: 花神游历各国(线段树) 同codevs2492

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 3628  Solved: 1326[Submit][Status][Discu ...

  5. BZOJ 3038: 上帝造题的七分钟2 / BZOJ 3211: 花神游历各国 (线段树区间开平方)

    题意 给出一些数,有两种操作.(1)将区间内每一个数开方(2)查询每一段区间的和 分析 普通的线段树保留修改+开方优化.可以知道当一个数为0或1时,无论开方几次,答案仍然相同.所以设置flag=1变表 ...

  6. bzoj3211花神游历各国 线段树

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 4252  Solved: 1547[Submit][Status][Discu ...

  7. BZOJ3211:花神游历各国(线段树)

    Description Input Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 4 1 100 5 5 5 1 1 2 2 1 2 1 1 2 2 2 3 ...

  8. BZOJ3211花神游历各国-线段树&树状数组-(HDU4027同类型)

    (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 题意:BZOJ HDU  原题目描述在最下面.  两种操作,1:把区间的数字开方一次,2:区间求和. 思路: 线段树:  显然不能暴力 ...

  9. day1 晚上 P4145 上帝造题的七分钟2 / 花神游历各国 线段树

    #include<iostream> #include<cstdio> #include<cmath> using namespace std; ; struct ...

随机推荐

  1. Java并发编程:volatile关键字解析(学习总结-海子)

    博文地址:Java并发编程:volatile关键字解析

  2. nodejs繁琐地自建路由

    一.繁琐的自建路由 app.js var server = require('./server'); server.startServer(); server.js var http = requir ...

  3. typeof的探讨

    console.log(typeof 'abc') // "string" console.log(typeof true )// "boolean" cons ...

  4. Aysnc-callback with future in distributed system

    Aysnc-callback with future in distributed system

  5. SpringCloud+Git+Maven+Docker+Jenkins自动化构建

    1.JDK安装-OpenJDK安装 yum list java-1.8* yum install -y java-1.8.0-openjdk-devel.x86_64 PS: JDK安装有两种方法:一 ...

  6. OSGEarth加载 geoserver 发布 TMS

    geoserver配好数据并用自带的gwc切片好后, 访问 http://localhost:9999/geoserver/gwc/service/tms/1.0.0/ 在OsgEarth的earth ...

  7. Android热修复 Dex注入实现静默消灭bug

    当app上线后发现紧急bug,如果重新发布版本周期比较长,并且对用户体验不好,此时热修复就派上用场了.热修复就是为紧急bug而生,能够快速修复bug,并且用户无感知.针对热修复,阿里系先后推出AndF ...

  8. Android ImageButton单击切换按钮图片效果

    正常状态的效果: 按钮按下的效果图片: 一.在java中为图片按钮增加触摸监听的函数来实现图片切换,代码如下: ImageButton btn = (ImageButton)findViewById( ...

  9. svn up (svn update) 状态缩写含义

    A:add,新增  C:conflict,冲突  D:delete,删除  M:modify,本地已经修改  G:modify and merGed,本地文件修改并且和服务器的进行合并  U:upda ...

  10. 异步nodejs代码的同步样子写法样例

    异步nodejs代码的同步样子写法样例 js的异步嵌套太深代码将不好看.尤其在用node的时候这种情况会大量出现. 这里用node连接redis,做一个用户注册的简单例子来说明.例如用redis做存储 ...