#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: 花神游历各国的更多相关文章

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

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

  2. BZOJ 3211: 花神游历各国【线段树区间开方问题】

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

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

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

  4. Codeforces 920F. SUM and REPLACE / bzoj 3211 花神游历各国

    题目大意: 一个数列 支持两种操作 1 把区间内的数变成他们自己的约数个数 2 求区间和 思路: 可以想到每个数最终都会变成2或1 然后我们可以线段树 修改的时候记录一下每段有没有全被修改成1或2 是 ...

  5. BZOJ 3211 花神游历各国 线段树平方开根

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3211 题目大意: 思路: 由于数据范围只有1e9,一个数字x开根号次数超过logx之后 ...

  6. BZOJ 3211 花神游历各国 (树状数组+并查集)

    题解:首先,单点修改求区间和可以用树状数组实现,因为开平方很耗时间,所以在这个方面可以优化,我们知道,开平方开几次之后数字就会等于1 ,所以,用数组记录下一个应该开的数,每次直接跳到下一个不是1的数字 ...

  7. 【BZOJ】3211: 花神游历各国

    题意 \(n\)个点,第\(i\)个点值为\(a_i\).\(m\)个询问,每次询问\([l, r]\)内的和或者将\([l, r]\)的每个值改为自己的算术平方根.(\(n \le 100000, ...

  8. 【BZOJ】3038: 上帝造题的七分钟2 && 3211: 花神游历各国

    [算法]线段树||树状数组&&并查集 [题解]修改必须暴力单点修改,然后利用标记区间查询. 优化:一个数经过不断开方很快就会变成1,所以维护区间最大值. 修改时访问到的子树最大值< ...

  9. 【BZOJ】【3211】花神游历各国

    线段树/暴力 线段树区间开方 唉,我傻逼了一下,TLE了一发,因为没考虑到0的情况…… 好吧简单来说一下,线段树动态查询区间和大家都会做……比较麻烦的是这次的修改变成开方了,然而这并没有什么好虚的,注 ...

随机推荐

  1. HDU1760 A New Tetris Game NP态

    A New Tetris Game Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  2. Bootstrap_媒体对象

    一.基本媒体对象 媒体对象一般是成组出现,而一组媒体对象常常包括以下几个部分: ☑ 媒体对像的容器:常使用“media”类名表示,用来容纳媒体对象的所有内容 ☑ 媒体对像的对象:常使用“media-o ...

  3. 最小化安装的CentOS7挂载ntfs格式的U盘

    准备从系统中拷贝一些文件到U盘,插上U盘. 一.获得U盘的设备识别符 fdisk -l 啊哈,我看到了,是/dev/sdb1 二.熟练的挂载 mount /dev/sdb1 /mnt/usb Duan ...

  4. 关于引用JS和CSS刷新浏览器缓存问题

    有时候我们会碰到上线的新版本都要刷新一次缓存的问题.那是因为改了JS的内容,但是JSP引用的地方后面的字符串未发生改变导致浏览器读取浏览器缓存而不会重新加载新的JS内容,以下提供两种解决方式: 1.每 ...

  5. CSS选择器--普通选择器

    普通选择器: 1.标签选择器:使用标签选择器,所有的相同的标签都会被选中.(如:选择div所有的div都被选中.) 2.类选择器:如果一个元素设置了多个类选择器样式,那么这些类选择器都会被设置.但是如 ...

  6. PBS 安装

    How to install PBS Pro using the configure script. . Install the prerequisite packages for building ...

  7. imadjust从用法到原理—Matlab灰度变换函数之一

    imadjust从用法到原理-Matlab灰度变换函数之一 转摘网址:http://blog.sina.com.cn/s/blog_14d1511ee0102ww6s.html imadjust函数是 ...

  8. IE下,js改变绝对定位的属性不生效

    如果想要动态改变定位位置的值,例如改变TOP的值,IE下必须要给TOP一个初始值,不然不生效..

  9. 在myeclipse2014使用git上传github

    简介 首先在myeclipse中安装github客户端插件,这里就不说了,跟安装svn客户端插件一样的步骤 1.选中要push到github的工程右键team->share project-&g ...

  10. torrent

    The World's Largest BitTorrent System