bzoj 3211: 花神游历各国
#include<cstdio>
#include<cmath>
#include<iostream>
#define M 100006
using namespace std;
struct data
{
int l,r;
long long zhi;
bool kg;
}shu[*M];
int n,m;
void jian(int a1,int l,int r)
{
shu[a1].l=l;
shu[a1].r=r;
if(l==r)
{
scanf("%lld",&shu[a1].zhi);
if(shu[a1].zhi==)
shu[a1].kg=;
return;
}
int mid=(l+r)>>;
jian(a1*,l,mid);
jian(a1*+,mid+,r);
shu[a1].zhi=shu[a1*].zhi+shu[a1*+].zhi;
shu[a1].kg=shu[a1*].kg&shu[a1*+].kg;
return;
}
void gai(int a1,int l,int r)
{
if(shu[a1].kg)
return;
if(shu[a1].l==shu[a1].r)
{
shu[a1].zhi=floor(sqrt(shu[a1].zhi));
if(shu[a1].zhi<)
shu[a1].kg=;
return;
}
int mid=(shu[a1].l+shu[a1].r)>>;
if(l<=mid)
gai(a1*,l,r);
if(r>mid)
gai(a1*+,l,r);
shu[a1].zhi=shu[a1*].zhi+shu[a1*+].zhi;
shu[a1].kg=shu[a1*].kg&&shu[a1*+].kg;
return;
}
long long xun(int a1,int l,int r)
{
if(shu[a1].l>=l&&shu[a1].r<=r)
return shu[a1].zhi;
long long sum=;
int mid=(shu[a1].l+shu[a1].r)>>;
if(l<=mid)
sum+=xun(a1*,l,r);
if(r>mid)
sum+=xun(a1*+,l,r);
return sum;
}
int main()
{
scanf("%d",&n);
jian(,,n);
scanf("%d",&m);
for(int i=;i<=m;i++)
{
int a1,a2,a3;
scanf("%d%d%d",&a1,&a2,&a3);
if(a2>a3)
swap(a2,a3);
if(a1==)
gai(,a2,a3);
if(a1==)
printf("%lld\n",xun(,a2,a3));
}
return ;
}
线段树每次开根号,如果他的所有叶节点都是1,就不用再开了。
bzoj 3211: 花神游历各国的更多相关文章
- BZOJ 3211: 花神游历各国( 线段树 )
线段树...区间开方...明显是要处理到叶节点的 之前在CF做过道区间取模...差不多, 只有开方, 那么每个数开方次数也是有限的(0,1时就会停止), 最大的数10^9开方10+次也就不会动了.那么 ...
- BZOJ 3211: 花神游历各国【线段树区间开方问题】
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 3514 Solved: 1306[Submit][Status][Discu ...
- BZOJ 3038: 上帝造题的七分钟2 / BZOJ 3211: 花神游历各国 (线段树区间开平方)
题意 给出一些数,有两种操作.(1)将区间内每一个数开方(2)查询每一段区间的和 分析 普通的线段树保留修改+开方优化.可以知道当一个数为0或1时,无论开方几次,答案仍然相同.所以设置flag=1变表 ...
- Codeforces 920F. SUM and REPLACE / bzoj 3211 花神游历各国
题目大意: 一个数列 支持两种操作 1 把区间内的数变成他们自己的约数个数 2 求区间和 思路: 可以想到每个数最终都会变成2或1 然后我们可以线段树 修改的时候记录一下每段有没有全被修改成1或2 是 ...
- BZOJ 3211 花神游历各国 线段树平方开根
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3211 题目大意: 思路: 由于数据范围只有1e9,一个数字x开根号次数超过logx之后 ...
- BZOJ 3211 花神游历各国 (树状数组+并查集)
题解:首先,单点修改求区间和可以用树状数组实现,因为开平方很耗时间,所以在这个方面可以优化,我们知道,开平方开几次之后数字就会等于1 ,所以,用数组记录下一个应该开的数,每次直接跳到下一个不是1的数字 ...
- 【BZOJ】3211: 花神游历各国
题意 \(n\)个点,第\(i\)个点值为\(a_i\).\(m\)个询问,每次询问\([l, r]\)内的和或者将\([l, r]\)的每个值改为自己的算术平方根.(\(n \le 100000, ...
- 【BZOJ】3038: 上帝造题的七分钟2 && 3211: 花神游历各国
[算法]线段树||树状数组&&并查集 [题解]修改必须暴力单点修改,然后利用标记区间查询. 优化:一个数经过不断开方很快就会变成1,所以维护区间最大值. 修改时访问到的子树最大值< ...
- 【BZOJ】【3211】花神游历各国
线段树/暴力 线段树区间开方 唉,我傻逼了一下,TLE了一发,因为没考虑到0的情况…… 好吧简单来说一下,线段树动态查询区间和大家都会做……比较麻烦的是这次的修改变成开方了,然而这并没有什么好虚的,注 ...
随机推荐
- h5移动端让文字不可选中复制
可以用css属性来控制 -moz-user-select:none; -webkit-user-select:none;
- c++初步实现的一个LRU
#include<iostream>#include<map> using namespace std; typedef struct Node{ int data; stru ...
- Swift根据日期字符串返回日期是星期几
最近在做的一个IOS项目中需要根据日期得出日期代表的是星期几,日期以字符串的形式获得,于是该方法可以简单描述如下: /* * 根据日期格式字符串返回日期代表星期几 * 参数:dateTime,字符串类 ...
- PHP5.5.13 + Apache2.4.7安装配置流程详解
---恢复内容开始--- 自学PHP的这段时间里,真是倍感辛酸,相信广大的菜鸟们应该很我感同身受吧,在查阅了网上和众多数资料后,总结出来想当比较全面的安装方法,拿出来与广大的编程爱好者一起分享哈. 首 ...
- iOS控制器之基类设计
题记 在进入新公司后.经过这一个月的重构项目,终于把项目做到了个人相对满意的程度(还有一种不满意的叫老板的需求,提过多次意见也没用= =!).在这次重构中按照以前的思路设计出了个人觉得比较适用的一个基 ...
- position absolute 绝对定位 设置问题
今天在做布局的时候,用到了绝对定位, 父级元素相对定位,子元素两个,一个元素正常文档流布局并且在前面,另一个元素绝对定位排在后面,但设置了好久,绝对定位的子元素都不会覆盖其上面的兄弟元素,最后,不知 ...
- 老王讲自制RPC框架.(四.序列化与反序列化)
#(序列化) 在实际的框架中,真正影响效率的就是数据的传输方式,以及传输的准备,或者说是tcp与http,序列化.当然要想提高整个框架的效率,需要采用一种高效的序列化 框架比如流行的protostuf ...
- bootstrap 分页表格插件
找了两个table的插件,一个是bootstrap table ,另一个是bootstrap-paginator 这里只介绍 bootstrap table 插件 使用及简单案例 文档介绍:http: ...
- 理解tcp协议的3次握手和面向连接
1.tcp是有连接的, 这个不是说他有个实际的连接,这个是个虚拟的连接,连接的保持信息不是由连接的路线来保存的,他是由连接的两方来保存其状态信息,这就是面向连接的, 2.tcp要3次握手: 客户端发给 ...
- json数组转普通数组 普通数组转json数组
1.json_decode() json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_decode — 对 JSON 格式的字符串进行 ...