这是一道关于线段树的区间开根号的裸题,没什么好讲的。

  值得注意的是,因为有区间开根号的性质,所以我们每一次更改操作只能把更改区间所覆盖的所有元素全部查找,当然你直接找效率明显爆炸。。。

  能够注意到,指数级别的操作一次更改的数字都很大,而题目的数字最大是10的9次,所以可以注意到的是当一个区间更新6遍以后就失去更新的意义了,因为当你更改次数超过6次所有非负整数数字就全部会化为1。所以可以在每一个节点上加一个类似于LAZY标记的东西,记录开根号次数,以便节约跟新时间。

  贴出题目&代码

Description

 线段树区间开根号与求和

Input

 第一行N代表有N个数
第二行有N个数,代表这N个值分别是多少
第三行有一个M
接下来M行,每行有X,L,R
当X为1代表求区间:(L,R)的和。
当X为2代表对区间:(L,R)开根号。

Output

每次x=1时,每行一个整数,表示区间和

Sample Input

4

1 100 5 5


5


1 1 2


2 1 2


1 1 2


2 2 3


1 1 4

Sample Output

101

11


11

HINT

对于100%的数据, n ≤ 100000,m≤200000 ,data[i]非负且小于10^9

 /**************************************************************
Problem: 3211
User: PencilWang
Language: C++
Result: Accepted
Time:1996 ms
Memory:9036 kb
****************************************************************/ #include<cstdio>
#include<cmath>
int n,m;
struct shit{
int L,R,t;
long long num;
}s[];
int w[];
void push_up(int p)
{
s[p].num=s[p<<].num+s[p<<|].num;
return ;
}
void build(int p,int l,int r)
{
s[p].L=l;
s[p].R=r;
if(l==r)
{
s[p].num=w[l];
return ;
}
int mid=(l+r)>>;
build(p<<,l,mid);
build(p<<|,mid+,r);
push_up(p);
return ;
}
void fuck(int p,int a,int b)
{
if(a<=s[p].L&&s[p].R<=b)
{
s[p].t++;
if(s[p].L==s[p].R)
{
s[p].num=sqrt(s[p].num);
return ;
}
}
int mid=(s[p].L+s[p].R)>>;
if(s[p<<].t<&&a<=mid)fuck(p<<,a,b);
if(s[p<<|].t<&&b>mid)fuck(p<<|,a,b);
push_up(p);
return ;
}
long long Q(int p,int a,int b)
{
if(a<=s[p].L&&s[p].R<=b)
{
return s[p].num;
}
long long ans=;
int mid=(s[p].L+s[p].R)>>;
if(a<=mid) ans+=Q(p<<,a,b);
if(b>mid)ans+=Q(p<<|,a,b);
return ans;
}
int main()
{
int a,b,f;
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",w+i);
scanf("%d",&m);
build(,,n);
while(m--)
{
scanf("%d%d%d",&f,&a,&b);
if(f-)fuck(,a,b);
else printf("%lld\n",Q(,a,b));
}
return ;
}

3211

刷题向》关于线段树的区间开根号 BZOJ3211(NORMAL+)的更多相关文章

  1. hdu 4027 Can you answer these queries? 线段树区间开根号,区间求和

    Can you answer these queries? Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/sho ...

  2. hdu 1556:Color the ball(线段树,区间更新,经典题)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  3. hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)

    #1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...

  4. 线段树离散化+区间更新——cf1179C好题

    绝对是很好的题 把问题转化成当第i个询问的答案是数值x时是否可行 要判断值x是否可行,只要再将问题转化成a数组里>=x的值数量是否严格大于b数组里的>=x的值 那么线段树叶子结点维护对于值 ...

  5. Codeforces Round #222 (Div. 1) D. Developing Game 线段树有效区间合并

    D. Developing Game   Pavel is going to make a game of his dream. However, he knows that he can't mak ...

  6. 2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)

    原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthes ...

  7. BZOJ 3110 ZJOI 2013 K大数查询 树套树(权值线段树套区间线段树)

    题目大意:有一些位置.这些位置上能够放若干个数字. 如今有两种操作. 1.在区间l到r上加入一个数字x 2.求出l到r上的第k大的数字是什么 思路:这样的题一看就是树套树,关键是怎么套,怎么写.(话说 ...

  8. HDU-6315 Naive Operations//2018 Multi-University Training Contest 2___1007 (线段树,区间除法)

    原题地址 Naive Operations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 502768/502768 K (Java/ ...

  9. 线段树_区间加乘(洛谷P3373模板)

    题目描述 如题,已知一个数列,你需要进行下面三种操作: 1.将某区间每一个数乘上x 2.将某区间每一个数加上x 3.求出某区间每一个数的和 输入格式: 第一行包含三个整数N.M.P,分别表示该数列数字 ...

随机推荐

  1. I.MX6 support eMMC 5.0

    /***************************************************************************** * I.MX6 support eMMC ...

  2. CentOS7 配置光盘iso镜像为本地yum源

    因为系统使用的最小化安装,所以很多软件没有安装上,又无法上网,为了方便,所以直接将上传的iso镜像直接作为yum源. 我已经将光盘的iso镜像上传至服务器. 接下来就是将iso的光盘镜像进行挂载了 m ...

  3. ACM学习历程—51NOD 1770数数字(循环节)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1770 这是这次BSG白山极客挑战赛的A题.由于数字全部相同,乘上b必然会 ...

  4. [转]linux下查看进程内存使用情况

    动态查看一个进程的内存使用 1.top命令 top -d 1 -p pid [,pid ...] //设置为delay 1s,默认是delay 3s 如果想根据内存使用量进行排序,可以shift + ...

  5. jslinq 使用总结

    最近一直在用 jslinq 感觉还是不错的.用于增强 Array.find() 上重点: 1: 引用 cnpm install jslinq --save (本人用淘宝镜像--npmFQ感觉也不快-- ...

  6. 调用 SSPI 失败,请参见内部异常 解决方法

    2017-11-12 12:49:53:706] OnServerConnectionAvailable error : System.Security.Authentication.Authenti ...

  7. 两种方式创建Maven项目【方式一】

    经常使用maven进行项目的管理,今天整理两种方式创建maven项目及创建过程中碰到的问题怎么解决: 方式一: 1.新建maven项目,点击下一步. 2.勾选Create a simple proje ...

  8. Host ASP.NET WebApi in Owin

    什么是OWIN Owin其实是微软为了解耦.Net Web app对IIS的依赖而制定的一套规范,规范定义了Web Server与Web App之间的接口,这样Web App就可以Host在所有兼容O ...

  9. 关于Homebrew出现GitHub API rate limit错误的解决方法

    参考博文: http://havee.me/mac/2013-12/how-to-install-and-use-homebrew.html Error: GitHub API rate limit ...

  10. show-overflow-tooltip 宽度设置

    设置样式:不能放在scoped中 <style lang="scss"> .el-tooltip__popper{max-width:80%}</style> ...