/*
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. Spark源码分析之-Storage模块

    原文链接:http://jerryshao.me/architecture/2013/10/08/spark-storage-module-analysis/ Background 前段时间琐事颇多, ...

  2. mongodb 导入导出

    F:\Mongodb\bin>mongoexport.exe -h localhost:27017 -d proxy_db -c proxy_tb -o f:/p1.json 导出 -h 服务器 ...

  3. mini_httpd的安装和配置

    1.下载:http://www.acme.com/software/mini_httpd/mini_httpd-1.19.tar.gz 2.解压:tar zxvf mini_httpd-1.19.ta ...

  4. mysql绿色版下载及应用

    一.mysql绿色版下载 第一歩:打开下载网址:https://www.oracle.com 点击Menu-->Database and Technologies-->Databases- ...

  5. Java多线程 编写三各类Ticket、SaleWindow、TicketSaleCenter分别代表票信息、售票窗口、售票中心。 售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程。

    package com.swift; import java.util.ArrayList; import java.util.HashMap; import java.util.List; impo ...

  6. NowCoder 9.9 模拟赛

    T1.中位数 二分答案x,原序列大于x的置为1,小于x的置为-1,判断是否存在长度大于m的区间和大于0(也就是大于x的数多于小于x的数),若有,则ans>=x,否则ans<x #inclu ...

  7. Python爬虫系列-Selenium详解

    自动化测试工具,支持多种浏览器.爬虫中主要用来解决JavaScript渲染的问题. 用法讲解 模拟百度搜索网站过程: from selenium import webdriver from selen ...

  8. 【laravel】Disabling CSRF for Specific Routes - Laravel 5

    原文 http://www.camroncade.com/disable-csrf-for-specific-routes-laravel-5/ Disabling CSRF for Specific ...

  9. CSS清除浮动8大方法

    CSS清除浮动是每一位web前端工程师都要掌握的技术,也是让每一位刚入门的前端工程师感到头疼的问题, 下面就来讲一下CSS清除浮动的原理和各种解决方法,大家可以根据实际情况选择最佳的解决方案. 在用D ...

  10. java的一些相关介绍(2013-10-07-163 写的日志迁移

    java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, Jav ...