lazy思想

当一个数开了6到7次根号时,就变成1了。

View Code

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #include<algorithm>
 5 #include<math.h>
 6 using namespace std;
 7 typedef __int64 int64;
 8 #define L( x ) (x<<1)
 9 #define R( x ) ((x<<1)+1)
10 const int64 maxn = 100005;
11 struct node{
12     int64 l,r,num;
13 }anode[ maxn*4 ];
14 int64 data[ maxn ];
15
16 void build( int64 l,int64 r,int64 n ){
17     if( l==r ){
18         anode[ n ].l=l,anode[ n ].r=r,anode[ n ].num=data[ l ];
19         return ;
20     }
21     int64 mid;
22     mid=( l+r )/2;
23     anode[ n ].l=l,anode[ n ].r=r;
24     build( l,mid,L( n ) );
25     build( mid+1,r,R( n ));
26     anode[ n ].num=anode[ L( n ) ].num+anode[ R( n ) ].num;
27     return ;
28 }//build the tree
29
30 void update( int64 l,int64 r,int64 n ){
31     if( anode[ n ].num==( anode[ n ].r-anode[ n ].l+1 ) ) return ;//一个数经过6,7次开根号就能变成1
32     if( anode[ n ].l==anode[ n ].r ) {
33         anode[ n ].num=sqrt( 1.0*anode[ n ].num );
34         return ;
35     }
36     int64 mid;
37     mid=( anode[ n ].l+anode[ n ].r )/2;
38     if( mid>=r ) update( l,r,L( n ) );
39     else if( mid<l ) update( l,r,R( n ) );
40     else {update( l,mid,L( n ) );update( mid+1,r,R( n ) );}
41     anode[ n ].num=anode[ L( n ) ].num+anode[ R( n ) ].num;
42     return ;
43 }
44
45 int64 query( int64 l,int64 r,int64 n ){
46     if( anode[ n ].l==l && anode[ n ].r==r ) return anode[ n ].num;
47     int64 mid;
48     mid=( anode[ n ].l+anode[ n ].r )/2;
49     if( mid>=r ) return query( l,r,L( n ) );
50     else if( mid<l ) return query( l,r,R( n ) );
51     else return( query( l,mid,L( n ) )+query( mid+1,r,R( n ) ) );
52 }
53
54 int main(){
55     int64 n;
56     int64 ca=1;
57     while( scanf("%I64d",&n)!=EOF ){
58         printf("Case #%I64d:\n",ca++);
59         for( int64 i=1;i<=n;i++ ){
60             scanf("%I64d",&data[ i ]);
61         }
62         build( 1,n,1 );
63         int64 tmp;
64         scanf("%I64d",&tmp);
65         while( tmp-- ){
66             int64 temp,a,b;
67             scanf("%I64d%I64d%I64d",&temp,&a,&b);
68             int64 j;
69             if(a>b){j=a;a=b;b=j;}
70             if(temp==0)
71                 update( a,b,1 );
72             else
73                 printf("%I64d\n",query( a,b,1 ));
74         }
75         printf("\n");
76     }
77     return 0;
78 }

转载于:https://www.cnblogs.com/xxx0624/archive/2013/01/28/2880296.html

HDU4027 (线段树/修改区间,询问区间和)相关推荐

  1. kb-07线段树-12--二分查找区间边界

    1 /* 2 hdu4614 3 本题刚开始想能不能记录该区间最前面开始的点,最后面的点,区间空的数量:但是病不行 4 然后线段树的本质是区间操作,所以!这题主要就是区间的空的全放满,只要定出区间的边 ...

  2. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)

    题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...

  3. 线段树动态开点区间加区间求和

    线段树动态开点区间加区间求和 题目来源: 陕西师范大学第七届程序设计竞赛网络同步赛 H. 万恶的柯怡 思想: 保证叶子节点被完整的覆盖,需要开节点,就把左右儿子都开出来,其余和普通线段树一样. tip ...

  4. HDU1166 (线段树/修改点,询问区间)

    详见代码 View Code 1 /* 2 改变一个点,询问区间和 3 线段树 4 */ 5 #include<stdio.h> 6 #define lson l , mid , rt & ...

  5. HDU 3974 Assign the task(DFS序+线段树单点查询,区间修改)

    描述 There is a company that has N employees(numbered from 1 to N),every employee in the company has a ...

  6. hdu 3397 Sequence operation(线段树,lazy,区间合并)

    hdu 3397 Sequence operation 线段树lazy和区间合并结合的一个题,相当于几个题集中到一起嘛,分开想就好了 0,1,2操作都要lazy,2的异或操作找到每一只含1或只含0的区 ...

  7. hdu 1166 敌兵布阵(线段树之 单点更新+区间求和)

    敌兵布阵                                                                             Time Limit: 2000/10 ...

  8. hdu 1754 I Hate It(线段树之 单点更新+区间最值)

    I Hate It                                                                             Time Limit: 90 ...

  9. HDU 3333-Turing Tree(线段树解决离线询问)

    题意: 给定一个长度为n的序列,给定m个查询,每次查询区间[L,R]范围内不同元素的和. 题解: x,yx,yx,y为查询的区间左右端点 用一个数组left[i]left[i]left[i],表示左边 ...

最新文章

  1. pdf转换成可编辑的word转换器
  2. adb 命令的个人记录
  3. ionic 安卓apk签名_安卓 APP 三代加壳方案的研究报告
  4. Visual Studio 2019 v16.4 Preview 2 发布
  5. linux 创建LVM磁盘
  6. Spss乱码问题的解决方法
  7. NOD32反病毒系统升级
  8. 适合小白的word基本操作
  9. 腾达W311MA无线网卡驱动安装 ubuntu16.04
  10. 动态规划,计算股票最大收益
  11. 环路稳定性原理与DCDC Buck环路稳定性
  12. 克隆出错fatal: unable to access ‘https://github.com/‘: OpenSSL SSL_connect:
  13. Flutter isolate应用
  14. 印象派绘画在现代艺术发展中的地位和作用
  15. 解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题
  16. 【机器学习】多项式回归案例五:正则惩罚解决过拟合(Ridge回归和Lasso回归)
  17. 机器学习 scikit-learn GridSearchCV scoring 参数设置
  18. sql 分组求和 、分组求平均
  19. Head First JAVA 拾忆-1
  20. Schiff Move Free维骨力这个牌子的保健效果怎么样,是要给中老年人群服用的

热门文章

  1. 2021年是“三蛇闹春,十鼠抢粮,十一牛耕田”,啥意思?
  2. 今日花生价格多少钱一斤?
  3. 刚走上管理岗位的人要怎么做?
  4. 主从reactor 多线程模型
  5. android factory,“工厂映像”(factory image)是什么?你所不知道的Android问题
  6. SQL Server 2014数据访问层
  7. 索引sql server_优化SQL Server索引策略
  8. SQL Server FILESTREAM数据库损坏和修复
  9. WebService 的CXF框架 WS方式Spring开发
  10. Visual Studio Code 使用Git进行版本控制