HDU 4027 <线段树,区间√>
题意
给出一个区间,每次把[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 <线段树,区间√>的更多相关文章
- HDU 4027 Can you answer these queries?(线段树的单点更新+区间查询)
题目链接 题意 : 给你N个数,进行M次操作,0操作是将区间内的每一个数变成自己的平方根(整数),1操作是求区间和. 思路 :单点更新,区间查询,就是要注意在更新的时候要优化,要不然会超时,因为所有的 ...
- HDU 4027—— Can you answer these queries?——————【线段树区间开方,区间求和】
Can you answer these queries? Time Limit:2000MS Memory Limit:65768KB 64bit IO Format:%I64d & ...
- HDU 4027 Can you answer these queries?(线段树区间开方)
Can you answer these queries? Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65768/65768 K ...
- HDU 4027(线段树)
HDU4027 题意:操作指令为0时,对区间[x,y]之间的数字进行开平方:指令为1的时候,对区间[x,y]之间的数字求和并输出: 思路:线段树处理就OK了,但是64位内的数最多开8次平方就为1了(开 ...
- Can you answer these queries? HDU 4027 线段树
Can you answer these queries? HDU 4027 线段树 题意 是说有从1到编号的船,每个船都有自己战斗值,然后我方有一个秘密武器,可以使得从一段编号内的船的战斗值变为原来 ...
- V - Can you answer these queries? HDU - 4027 线段树 暴力
V - Can you answer these queries? HDU - 4027 这个题目开始没什么思路,因为不知道要怎么去区间更新这个开根号. 然后稍微看了一下题解,因为每一个数开根号最多开 ...
- hdu 4027 Can you answer these queries?
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4027 Can you answer these queries? Description Proble ...
- 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 ...
- hdu 4027
Can you answer these queries? Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65768/65768 K ...
- hdu 4027 2011上海赛区网络赛G 线段树 成段平方根 ***
不能直接使用成段增减的那种,因为一段和的平方根不等于平方根的和,直接记录是否为1,是1就不需要更新了 #include<cstdio> #include<iostream> # ...
随机推荐
- 1、Spring概述
Java EE优缺点 我们都知道在2003年Spring兴起之前,企业普遍使用J2EE技术来开发企业级应用,为什么用J2EE呢?主要原因有以下几个: 1.Java本身的跨平台能力,可移植性强2.J2E ...
- bug记录_document.defaultview.getcomputedstyle()
页面中使用document.defaultview.getcomputedstyle()在火狐下取不到值. 原本方法现在$(document).ready()中,换到window.onload里就可以 ...
- 关于socket客户端接收不定长数据的解决方案
#!/usr/bin/env python3.5 # -*-coding:utf8-*- """ 本实例客户端用于不断接收不定长数据,存储到变量res "&qu ...
- CentOS中文件夹基本操作命令
摘自:http://www.centoscn.com/CentOS/help/2013/1024/1967.html 文件(夹)查看类命令 ls--显示指定目录下内容 说明:ls 显示结果以不同的颜色 ...
- 杭电20题 Human Gene Functions
Problem Description It is well known that a human gene can be considered as a sequence, consisting o ...
- 1.(1)编写一个接口ShapePara,要求: 接口中的方法: int getArea():获得图形的面积。int getCircumference():获得图形的周长 (2)编写一个圆类Circle,要求:圆类Circle实现接口ShapePara。 该类包含有成员变量: radius:public 修饰的double类型radius,表示圆的半径。 x:private修饰的double型变量
//接口 ShapePara package d922B; public interface ShapePara { int getArea(); int getCircumference(); } ...
- boost.spirit之解析C++头文件
环境:win7_64旗舰版,VS2008 场景:C++与lua交互是比较繁琐的,当我们编写一个C++类后,如果要给lua使用,就必须写一个lua包装类,将lua与原始C++类关联起来.其实这部分代码编 ...
- JavaScript 构造函数 prototype属性和_proto_和原型链 constructor属性 apply(),call()和bind() 关键字this
1.构造函数: 通常构造函数首字母需要大写,主要是为了区别ECMAScript的其它函数.(高程三 P145) 构造函数与其他函数的唯一区别,就在于调用它们的方式不同.只要通过new来调用,任何函数都 ...
- drawableLayout的使用(转载讲的比较清晰的文章)
创建drawbler的布局文件 初始化drawbler的列表 响应drawable列表点击事件 现在侧滑菜单使用很多,大都是通过SlidingMenu实现.现在也可以通过DrawerLayout 创建 ...
- C语言-字符串文本串联
要形成包含多个行的字符串,可以串联两个字符串. 为此,请键入正斜杠,然后按 return 键. 反斜杠导致编译器忽略以下换行符. 例如,字符串 "Long strings can b ...