题目链接

题意 : 给你N个数,进行M次操作,0操作是将区间内的每一个数变成自己的平方根(整数),1操作是求区间和。

思路 :单点更新,区间查询,就是要注意在更新的时候要优化,要不然会超时,因为所有的数开几次方之后都会变成1,所以到了1不用没完没了的更新。

 //HDU 4027
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#define LL __int64
using namespace std ; LL p[ * ],lz[ * ] ;
void pushup(int rt)
{
p[rt] = p[rt << ] + p[rt << | ] ;
}
//void pushdown(int rt,int m)
//{
// if(lz[rt])
// {
// lz[rt << 1] = lz[rt << 1 | 1] = lz[rt] ;
// p[rt << 1] = (m - m/2) * lz[rt] ;
// p[rt << 1|1] = m/2 * lz[rt] ;
// lz[rt] = 0 ;
// }
//}
void build(int l,int r,int rt)
{
lz[rt] = ;
LL a ;
if(l == r)
{
scanf("%I64d",&a) ;
p[rt] = a ;
return ;
}
int mid = (l+r) >> ;
build(l,mid,rt << ) ;
build(mid+,r,rt << | ) ;
pushup(rt) ;
}
void update(int L,int R ,int l,int r,int rt)
{
if(p[rt] == r-l+)
return ;
if(l == r)
{
p[rt] = sqrt(p[rt]*1.0) ;
return ;
}
//pushdown(rt,r-l+1) ;
int mid = (l+r) >> ;
if(mid >= L)
update(L,R,l,mid,rt << ) ;
if(R > mid)
update(L,R,mid+,r,rt << | ) ;
pushup(rt) ;
}
LL query(int L,int R,int l,int r,int rt)
{
LL sum = ;
if(l >= L && R >= r)
return p[rt] ;
//pushdown(rt,r-l+1) ;
int mid = (l+r) >> ;
if(mid >= L)
sum += query(L,R,l,mid,rt << ) ;
if(mid < R)
sum += query(L,R,mid+,r,rt << | ) ;
return sum ;
}
int main()
{
int N,M,x,y,z ,casee = ;
while(cin >> N)
{
build(,N,) ;
scanf("%d",&M) ;
printf("Case #%d:\n",casee++) ;
while(M--)
{
scanf("%d %d %d",&x,&y,&z) ;
if(y > z)
swap(y,z) ;
if(x == )
{
update(y,z,,N,) ;
}
else
{
printf("%I64d\n",query(y,z,,N,) ) ;
}
}
puts("") ;
}
return ;
}

HDU 4027 Can you answer these queries?(线段树的单点更新+区间查询)的更多相关文章

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

    题目 线段树 简单题意: 区间(单点?)更新,区间求和  更新是区间内的数开根号并向下取整 这道题不用延迟操作 //注意: //1:查询时的区间端点可能前面的比后面的大: //2:优化:因为每次更新都 ...

  2. HDU 4027 Can you answer these queries? (线段树成段更新 && 开根操作 && 规律)

    题意 : 给你N个数以及M个操作,操作分两类,第一种输入 "0 l r" 表示将区间[l,r]里的每个数都开根号.第二种输入"1 l r",表示查询区间[l,r ...

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

  4. HDU 4027 Can you answer these queries? (线段树区间修改查询)

    描述 A lot of battleships of evil are arranged in a line before the battle. Our commander decides to u ...

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

    线段树+剪枝优化!!! 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #includ ...

  6. hdu1754线段树的单点更新区间查询

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. hdu 5475 An easy problem(暴力 || 线段树区间单点更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=5475 An easy problem Time Limit: 8000/5000 MS (Java/Others ...

  8. POJ 2892 Tunnel Warfare || HDU 1540(树状数组+二分 || 线段树的单点更新+区间查询)

    点我看题目 题意 :N个村子连成一条线,相邻的村子都有直接的地道进行相连,不相连的都由地道间接相连,三个命令,D x,表示x村庄被摧毁,R  ,表示最后被摧毁的村庄已经重建了,Q x表示,与x直接或间 ...

  9. hdu1698线段树的区间更新区间查询

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

随机推荐

  1. Android SharedPreferences使用以及原理详解

    SharedPreferences的使用非常简单,能够轻松的存放数据和读取数据.SharedPreferences只能保存简单类型的数据,例如,String.int等.一般会将复杂类型的数据转换成Ba ...

  2. Android之Activity的几种跳转方式

     1.显示调用方法 Intent intent=new Intent(this,OtherActivity.class);  //方法1 Intent intent2=new Intent(); in ...

  3. 三星N8000/N8010通用刷机教程

    前面已经讲到过如何给三星n8000/n8010 Galaxy Note 10.1获取ROOT权限了.接下来就顺便告诉大家怎么给三星n8000/n8010刷机吧.其实给三星n8000/n8010刷机过程 ...

  4. 关于UIView需要看的一些官方文档

    View Controller PG(Programming Guide)  看过一遍 View PG 正在看 Drawing and Printing PG Quartz 2D PG 更高级的cus ...

  5. maven学习手记 - 2

    学习目标 maven 的插件和目标: maven 的生命周期和阶段.   前言 在手记1中看到执行 mvn clean package 时,maven 自动执行了compile 和 test 操作. ...

  6. [原创]flexslider 中文文档 使用教程 参数手册

    要改前人用的flexslider功能,但苦于找不到详细的文档教程,折磨了好久……(所以我才说不爱乱用插件) 为了福利下之后也苦于这个问题的人,我整理总结了下我找到的一些东西.可能没那么完善正确,欢迎在 ...

  7. gvim 常用配置

    set nocompatible set nu! filetype on syntax on set autoindent set ai! "set bg=dark set autoinde ...

  8. 如何在github上fork一个项目来贡献代码以及同步原作者的修改

    [-] 如何贡献自己的力量 如何让自己的项目与原作者的项目保持同步 作为一个IT人,通过github进行学习是最快的成长手 段.我们可以浏览别人的优秀代码.但只看不动手还是成长得很慢,因此为别人贡献代 ...

  9. 关于spring mvc MaxUploadSizeExceededException 死循环解决方案

    当看到这文章的时候相信你现在应该遇到这样的问题了,我也是自己遇到了后来找到解决方案了记录下来,如果下次遇到就可以直接解决了. 至于为什么会出现这样的情况,可以看这篇文章:https://bz.apac ...

  10. svn版本控制器在vs2013中的使用

      下面记录常用的几种用法:   a) SVN检出 将SVN服务端所保存的数据下载到个人工作平台. 组长上传初始项目后,各组员可以到服务器上检出项目 1. 打开Visual Studio 2010-& ...