kb-07线段树-08--区间开根
/*
hdu-4027
题目:区间开根求和查询;
因为是开根,所以要更新的话就要更新到叶子节点。如果区间里全是1或是0的话就步用继续更新了,查询的时候正常查询;
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define ll long long
using namespace std;
struct Node
{
int l,r;
ll value;
int add;
}tr[]={};
ll n,m,a[]={};
ll ans=;
void Pushup(int rt)
{
int lson=rt<<;
int rson=rt<<|;
tr[rt].value=tr[lson].value+tr[rson].value;
if(tr[lson].add==||tr[rson].add==)
tr[rt].add=;
else
tr[rt].add=;
}
void build(int rt,int l,int r)
{
tr[rt].l=l;
tr[rt].r=r;
tr[rt].add=;
if(l==r)
{
tr[rt].value=a[l];
return ;
}
int mid=(l+r)/;
build(rt<<,l,mid);
build(rt<<|,mid+,r);
Pushup(rt);
}
void Update(int rt,int l,int r)
{
if(tr[rt].add==)//如果区间全是1或0就不更新;
return;
if(tr[rt].l==tr[rt].r&&l==r)//深入到叶子节点开根号;
{
tr[rt].value=(int)sqrt((double)tr[rt].value);
if(tr[rt].value==||tr[rt].value==)
tr[rt].add=;
return ;
}//没有要pusdown的所以没有pushdown
if(l<=tr[rt<<].r)
{
if(r<=tr[rt<<].r)
Update(rt<<,l,r);
else
Update(rt<<,l,tr[rt<<].r);
}
if(r>=tr[rt<<|].l)
{
if(l>=tr[rt<<|].l)
Update(rt<<|,l,r);
else
Update(rt<<|,tr[rt<<|].l,r);
}
Pushup(rt);
}
void Query(int rt,int l,int r)
{
if(tr[rt].l==l&&tr[rt].r==r)
{
ans+=tr[rt].value;
return ;
}
if(l<=tr[rt<<].r)
{
if(r<=tr[rt<<].r)
Query(rt<<,l,r);
else
Query(rt<<,l,tr[rt<<].r);
}
if(r>=tr[rt<<|].l)
{
if(l>=tr[rt<<|].l)
Query(rt<<|,l,r);
else
Query(rt<<|,tr[rt<<|].l,r);
}
}
int main()
{
int k=;
while(scanf("%lld",&n)!=EOF)
{
printf("Case #%d:\n",k++);
memset(a,,sizeof(a));
memset(tr,,sizeof(tr));
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
}
build(,,n);
scanf("%lld",&m);
for(int i=;i<m;i++)
{
int x,l,r;
scanf("%d%d%d",&x,&l,&r);
if(l>r)//输入有坑;
swap(l,r);
if(x==)
{
Update(,l,r);
}
else
{
ans=;
Query(,l,r);
printf("%lld\n",ans);
}
}
printf("\n");
}
return ;
}
kb-07线段树-08--区间开根的更多相关文章
- 刷题向》关于线段树的区间开根号 BZOJ3211(NORMAL+)
		这是一道关于线段树的区间开根号的裸题,没什么好讲的. 值得注意的是,因为有区间开根号的性质,所以我们每一次更改操作只能把更改区间所覆盖的所有元素全部查找,当然你直接找效率明显爆炸... 能够注意到,指 ... 
- [BZOJ3211]花神游历各国(线段树+区间开根)
		题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3211 分析: 区间开根是没法区间合并的. 但是注意到10^9开根开个5次就变成1了…… ... 
- HDU 5877 2016大连网络赛 Weak Pair(树状数组,线段树,动态开点,启发式合并,可持久化线段树)
		Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Tota ... 
- 线段树(区间树)之区间染色和4n推导过程
		前言 线段树(区间树)是什么呢?有了二叉树.二分搜索树,线段树又是干什么的呢?最经典的线段树问题:区间染色:正如它的名字而言,主要解决区间的问题 一.线段树说明 1.什么是线段树? 线段树首先是二叉树 ... 
- zoj3686(线段树的区间更新)
		对线段树的区间更新有了初步的了解... A Simple Tree Problem Time Limit: 3 Seconds Memory Limit: 65536 KB Given a ... 
- 【bzoj3110】[Zjoi2013]K大数查询  权值线段树套区间线段树
		题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ... 
- ZOJ 2301 Color the Ball 线段树(区间更新+离散化)
		Color the Ball Time Limit: 2 Seconds Memory Limit: 65536 KB There are infinite balls in a line ... 
- 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 ... 
- hiho一下20周  线段树的区间修改
		线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题改了改,又出给了 ... 
随机推荐
- UI EventSystem事件监听
			Unity5.0 EventSystem事件系统的详细说明 一.EventSystem对象的说明 当我们在场景中创建任一UI对象后,Hierarchy面板中都可以看到系统自动创建了对象EventSys ... 
- [学习笔记] AD笔记
			Auto diff 深度学习基础知识,auto diff自动微分的笔记,tensorflow中的求导就是基于这个做的.多用于复杂神经网络求导.来自于一篇论文,没怎么看完,但是会算了,比较底层一点吧.. ... 
- rcnn,sppnet,fast rcnn,ohem,faster rcnn,rfcn
			https://zhuanlan.zhihu.com/p/21412911 rcnn需要固定图片的大小,fast rcnn不需要 rcnn,sppnet,fast rcnn,ohem,faster r ... 
- MySql查询时间段的方法
			本文实例讲述了MySql查询时间段的方法.分享给大家供大家参考.具体方法如下: MySql查询时间段的方法未必人人都会,下面为您介绍两种MySql查询时间段的方法,供大家参考. MySql的时间字段有 ... 
- java,编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz.
			需求:编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz. package study01; public cla ... 
- CF-1114 (2019/02/11)
			CF-1114 A. Got Any Grapes? skip B. Yet Another Array Partitioning Task 将n个数分成连续的k组,使得每组的前m大的数字的总和最大. ... 
- SSL免费证书申请以及nginx配置https流程记录
			设置https需要ssl 证书,可以通过FreeSSL[https://freessl.org/]申请. 流程记录: 输入域名,如 http://www.youdias.xin 选择品牌,如Let's ... 
- MySQL练习50题
			介绍一个学习SQL的网站:https://sqlbolt.com/ 习题来源于网络,SQL语句是自己的练习答案,部分参考了网络上的答案. 花了一晚上的时间做完,个人认为其中的难点有:分组提取前几名的数 ... 
- 中国电信物联网平台入门学习笔记2: DOME程序分析
			"墨子号NB-IOT开发板"提供的dome: 程序只要分为延时,定时器,串口通讯…… 工程文件在:…\STM32L1xx_StdPeriph_Lib_V1.3.1\Project\ ... 
- solr7.7.1完整教程
			安装 上传solr-7.7.1.tgz至服务器 opt文件加下 解压 tar -zxvf solr-7.7.1.tgz 运行 进入到加压后的文件夹/opt/solr-7.7.1,执行一下命令启动sol ... 
