题目连接

题意

给出一个区间,每次把[l,r]内的值√,维护区间和。

坑:

£:l会比r大,swap.
£: 当f[i].sum=f[i].r-f[i].l+1;,不修改。因为保证每个数都大于等于1,当每个数都为1的时候,此区间不需要开根。
//纯手工
#include<cmath>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn=100000+10;
LL a[maxn];
struct node
{
int l,r;
LL sum;
};
node f[maxn*4];
void maketree(int i,int l,int r)
{
f[i].r=r;
f[i].l=l;
f[i].sum=0;
if(l==r)
{
f[i].sum=a[l];
return ;
}
int mid =(r+l)>>1;
maketree(i<<1,l,mid);
maketree(i<<1|1,mid+1,r);
f[i].sum=f[i<<1].sum+f[i<<1|1].sum;
}
void update(int i,int l,int r)
{
if(f[i].sum==(f[i].r-f[i].l+1))//全部为一的时候,不需要开根号
return ;
if(f[i].l==f[i].r)
{
f[i].sum=sqrt(f[i].sum*1.0);
return ;
}
int mid =(f[i].l+f[i].r)>>1;
if(r<=mid)
update(i<<1,l,r);
else if(l>=mid+1)
update(i<<1|1,l,r);
else
{
update(i<<1,l,mid);
update(i<<1|1,mid+1,r);
}
f[i].sum=f[i<<1].sum+f[i<<1|1].sum;//递归
}
LL sum(int i,int l,int r)
{
if(f[i].l==l&&f[i].r==r)
return f[i].sum;
LL ret=0;
int mid =(f[i].l+f[i].r)>>1;
if(r<=mid)
ret=sum(i<<1,l,r);
else if(l>=mid+1)
ret=sum(i<<1|1, l, r);
else
ret=sum(i<<1, l, mid)+sum(i<<1|1,mid+1,r);
return ret;
}
int main ()
{
int n,m,k=0;
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
maketree(1, 1, n);
scanf("%d",&m);
printf("Case #%d:\n",++k);
int T,l,r;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&T,&l,&r);
if(l>r)
swap(l,r);
if(T==0)
update(1, l, r);
else
printf("%lld\n",sum(1, l, r));
}
printf("\n");
}
return 0;
}

HDU 4027 <线段树,区间√>的更多相关文章

  1. HDU 4027 Can you answer these queries?(线段树的单点更新+区间查询)

    题目链接 题意 : 给你N个数,进行M次操作,0操作是将区间内的每一个数变成自己的平方根(整数),1操作是求区间和. 思路 :单点更新,区间查询,就是要注意在更新的时候要优化,要不然会超时,因为所有的 ...

  2. HDU 4027—— Can you answer these queries?——————【线段树区间开方,区间求和】

    Can you answer these queries? Time Limit:2000MS     Memory Limit:65768KB     64bit IO Format:%I64d & ...

  3. HDU 4027 Can you answer these queries?(线段树区间开方)

    Can you answer these queries? Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65768/65768 K ...

  4. HDU 4027(线段树)

    HDU4027 题意:操作指令为0时,对区间[x,y]之间的数字进行开平方:指令为1的时候,对区间[x,y]之间的数字求和并输出: 思路:线段树处理就OK了,但是64位内的数最多开8次平方就为1了(开 ...

  5. Can you answer these queries? HDU 4027 线段树

    Can you answer these queries? HDU 4027 线段树 题意 是说有从1到编号的船,每个船都有自己战斗值,然后我方有一个秘密武器,可以使得从一段编号内的船的战斗值变为原来 ...

  6. V - Can you answer these queries? HDU - 4027 线段树 暴力

    V - Can you answer these queries? HDU - 4027 这个题目开始没什么思路,因为不知道要怎么去区间更新这个开根号. 然后稍微看了一下题解,因为每一个数开根号最多开 ...

  7. hdu 4027 Can you answer these queries?

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4027 Can you answer these queries? Description Proble ...

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

  9. hdu 4027

    Can you answer these queries? Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65768/65768 K ...

  10. hdu 4027 2011上海赛区网络赛G 线段树 成段平方根 ***

    不能直接使用成段增减的那种,因为一段和的平方根不等于平方根的和,直接记录是否为1,是1就不需要更新了 #include<cstdio> #include<iostream> # ...

随机推荐

  1. 5、Struts2自定义拦截器

    一.拦截器相关知识 1.Struts2框架剖析 Holly版本生活案例: 影视公司(拍电影)    ActionMapper 传媒公司(包装明星) ActionMapping 明星           ...

  2. 四、WCF的配置文件

    注:本文为学习摘抄,原文地址:http://www.cnblogs.com/iamlilinfeng/archive/2012/10/02/2710224.html 一.概述 配置也是WCF编程中的主 ...

  3. LeetCode OJ 169. Majority Element

    Given an array of size n, find the majority element. The majority element is the element that appear ...

  4. Openjudge-计算概论(A)-人民币支付

    描述: 从键盘输入一指定金额(以元为单位,如345),然后输出支付该金额的各种面额的人民币数量,显示100元,50元,20元,10元,5元,1元各多少张,要求尽量使用大面额的钞票. 输入一个小于100 ...

  5. Sublime Text学习笔记

    1.快捷键(Key Bindings)   Preferences -> Key Bindings ->Default   会打开一个配置文件,里面全是配置信息 2.代码片段(Snippe ...

  6. mac mysql下载

    mysql下载地址:http://dev.mysql.com/downloads/mysql/,不需要账号的 mysql创建数据库,默认字符集是latin1,可以指定字符集. mac删除mysql c ...

  7. mac中eclipse安装openExplore插件

    插件地址:https://github.com/samsonw/OpenExplorer/downloads 将下载的jar包放入下面地址:应用程序->eclipse.app,右击->打开 ...

  8. VBS获取Ini配置文件一个节点下的所有字段的值

    ''* 功能:使用VBS读取ini文件中指定节点下的所有值'* 输入参数:inipath :ini文件的地址'*           initypes :ini文件中包含在"["和 ...

  9. js函数大全(2)

    原文地址:http://phperbar.blog.163.com/blog/static/162596182201032935815391/ 1.常规函数 javascript常规函数包括以下9个函 ...

  10. foreach 跟volist 有什么区别?

    <foreach name="list" item="vo">{$vo.id}{$vo.name}</foreach>Foreach标签 ...