HDU4027 (线段树/修改区间,询问区间和)
lazy思想
当一个数开了6到7次根号时,就变成1了。
![](/assets/blank.gif)
![](/assets/blank.gif)
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 (线段树/修改区间,询问区间和)相关推荐
- kb-07线段树-12--二分查找区间边界
1 /* 2 hdu4614 3 本题刚开始想能不能记录该区间最前面开始的点,最后面的点,区间空的数量:但是病不行 4 然后线段树的本质是区间操作,所以!这题主要就是区间的空的全放满,只要定出区间的边 ...
- poj 2892---Tunnel Warfare(线段树单点更新、区间合并)
题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...
- 线段树动态开点区间加区间求和
线段树动态开点区间加区间求和 题目来源: 陕西师范大学第七届程序设计竞赛网络同步赛 H. 万恶的柯怡 思想: 保证叶子节点被完整的覆盖,需要开节点,就把左右儿子都开出来,其余和普通线段树一样. tip ...
- HDU1166 (线段树/修改点,询问区间)
详见代码 View Code 1 /* 2 改变一个点,询问区间和 3 线段树 4 */ 5 #include<stdio.h> 6 #define lson l , mid , rt & ...
- 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 ...
- hdu 3397 Sequence operation(线段树,lazy,区间合并)
hdu 3397 Sequence operation 线段树lazy和区间合并结合的一个题,相当于几个题集中到一起嘛,分开想就好了 0,1,2操作都要lazy,2的异或操作找到每一只含1或只含0的区 ...
- hdu 1166 敌兵布阵(线段树之 单点更新+区间求和)
敌兵布阵 Time Limit: 2000/10 ...
- hdu 1754 I Hate It(线段树之 单点更新+区间最值)
I Hate It Time Limit: 90 ...
- HDU 3333-Turing Tree(线段树解决离线询问)
题意: 给定一个长度为n的序列,给定m个查询,每次查询区间[L,R]范围内不同元素的和. 题解: x,yx,yx,y为查询的区间左右端点 用一个数组left[i]left[i]left[i],表示左边 ...
最新文章
- pdf转换成可编辑的word转换器
- adb 命令的个人记录
- ionic 安卓apk签名_安卓 APP 三代加壳方案的研究报告
- Visual Studio 2019 v16.4 Preview 2 发布
- linux 创建LVM磁盘
- Spss乱码问题的解决方法
- NOD32反病毒系统升级
- 适合小白的word基本操作
- 腾达W311MA无线网卡驱动安装 ubuntu16.04
- 动态规划,计算股票最大收益
- 环路稳定性原理与DCDC Buck环路稳定性
- 克隆出错fatal: unable to access ‘https://github.com/‘: OpenSSL SSL_connect:
- Flutter isolate应用
- 印象派绘画在现代艺术发展中的地位和作用
- 解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题
- 【机器学习】多项式回归案例五:正则惩罚解决过拟合(Ridge回归和Lasso回归)
- 机器学习 scikit-learn GridSearchCV scoring 参数设置
- sql 分组求和 、分组求平均
- Head First JAVA 拾忆-1
- Schiff Move Free维骨力这个牌子的保健效果怎么样,是要给中老年人群服用的
热门文章
- 2021年是“三蛇闹春,十鼠抢粮,十一牛耕田”,啥意思?
- 今日花生价格多少钱一斤?
- 刚走上管理岗位的人要怎么做?
- 主从reactor 多线程模型
- android factory,“工厂映像”(factory image)是什么?你所不知道的Android问题
- SQL Server 2014数据访问层
- 索引sql server_优化SQL Server索引策略
- SQL Server FILESTREAM数据库损坏和修复
- WebService 的CXF框架 WS方式Spring开发
- Visual Studio Code 使用Git进行版本控制