/*
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--区间开根的更多相关文章

  1. 刷题向》关于线段树的区间开根号 BZOJ3211(NORMAL+)

    这是一道关于线段树的区间开根号的裸题,没什么好讲的. 值得注意的是,因为有区间开根号的性质,所以我们每一次更改操作只能把更改区间所覆盖的所有元素全部查找,当然你直接找效率明显爆炸... 能够注意到,指 ...

  2. [BZOJ3211]花神游历各国(线段树+区间开根)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3211 分析: 区间开根是没法区间合并的. 但是注意到10^9开根开个5次就变成1了…… ...

  3. HDU 5877 2016大连网络赛 Weak Pair(树状数组,线段树,动态开点,启发式合并,可持久化线段树)

    Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Tota ...

  4. 线段树(区间树)之区间染色和4n推导过程

    前言 线段树(区间树)是什么呢?有了二叉树.二分搜索树,线段树又是干什么的呢?最经典的线段树问题:区间染色:正如它的名字而言,主要解决区间的问题 一.线段树说明 1.什么是线段树? 线段树首先是二叉树 ...

  5. zoj3686(线段树的区间更新)

    对线段树的区间更新有了初步的了解... A Simple Tree Problem Time Limit: 3 Seconds      Memory Limit: 65536 KB Given a ...

  6. 【bzoj3110】[Zjoi2013]K大数查询 权值线段树套区间线段树

    题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...

  7. ZOJ 2301 Color the Ball 线段树(区间更新+离散化)

    Color the Ball Time Limit: 2 Seconds      Memory Limit: 65536 KB There are infinite balls in a line ...

  8. 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 ...

  9. hiho一下20周 线段树的区间修改

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

随机推荐

  1. 小技巧:unicode RLO

    unicode 控制字符 RLO 可以将位于其后的文字翻转. 于是可以被病毒利用. 如图 重命名文件,在gpj前插入unicode RLO,之后若不小心,可能会被欺骗,误以为是jpg文件. 如果修改程 ...

  2. 查看nvidia的GPU

    nvidia-smi就可以查看,可以看到进程的占用率,可以kill杀掉进程 注意这里的-前后都不要空格,连起来写

  3. 爬虫遇到HTTP Error 403的问题

    # coding=gbk from bs4 import BeautifulSoup import requests import urllib x = 1 y = 1 def crawl(url): ...

  4. 【思维题】TCO14 Round 2C InverseRMQ

    全网好像就只有劼和manchery写了博客的样子……:正解可能是最大流?但是仔细特判也能过 题目描述 RMQ问题即区间最值问题是一个有趣的问题. 在这个问题中,对于一个长度为 n 的排列,query( ...

  5. 标准C++(2)

    一.类 C++是一种面向对象的语言,它在C语言的基础上添加了一种新的数据结构,类 ——class class是一种复合型的数据结构 它能够由不同类型的变量及函数组成 C++中的class与struct ...

  6. json转换为字典

    str---dict ata_dict=json.loads(data)

  7. Windows Bash on Ubuntu

    windows Bash on Ubuntu, 之前就是尝试一下,更多是在不安装虚拟机的情况下,学下 bash. 这几天,在 上面 make u-boot,这个用起来比 cygwin方便多了. 之前在 ...

  8. apicloud入门学习笔记1:简单介绍

    官网地址:https://www.apicloud.com/ 新手开发指南:https://docs.apicloud.com/APICloud/junior-develop-guide 开发语言:H ...

  9. POJ:1751-Highways(Kruskal和Prim)

    Highways Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6078 Accepted: 1650 Special Judg ...

  10. vmware10下载地址

    https://download3.vmware.com/software/wkst/file/VMware-Workstation-Full-10.0.1-1379776.x86_64.bundle ...