hdu 4027(线段树区间开方求和)
2016-07-27 15:35
351 查看
本来很早就做了这道题的,但是今天突然发现了.
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4027
解法:首先这道题的数据就告诉我们只能用线段树,但区间操作似乎很蛋疼,我当时想的是用lazy标记记录这段区间要开方几次,等query时在统一进行单点更新,然后…….我就T了,如果update一次query一次,我的lazy标记便并卵了,所以我们需要想更好方法来解这道题.
每个数的范围是int,且向下取整,这代表在少量操作后,它就会为一,所以我们只需要看这段区间的值是否为r-l+1,如果是,就continue,否则就单点更新,这样的时间复杂度大约在nlogn左右.问题完美解决
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4027
解法:首先这道题的数据就告诉我们只能用线段树,但区间操作似乎很蛋疼,我当时想的是用lazy标记记录这段区间要开方几次,等query时在统一进行单点更新,然后…….我就T了,如果update一次query一次,我的lazy标记便并卵了,所以我们需要想更好方法来解这道题.
每个数的范围是int,且向下取整,这代表在少量操作后,它就会为一,所以我们只需要看这段区间的值是否为r-l+1,如果是,就continue,否则就单点更新,这样的时间复杂度大约在nlogn左右.问题完美解决
#include <cstdio> #include <cmath> #include <iostream> #include <cstring> #include <algorithm> #define lson rt<<1,l,mid #define rson rt<<1|1,mid+1,r using namespace std; int sum[400005],n,m,x,l,r; void pushup(int rt) { sum[rt]=sum[rt<<1]+sum[rt<<1|1]; } void build(int rt,int l,int r) { if (l==r) { scanf("%d",&sum[rt]); return; } int mid=(l+r)>>1; build(lson); build(rson); pushup(rt); } void update(int rt,int l,int r,int x,int y) { if (x<=l&&y>=r&&l==r) { sum[rt]=sqrt(sum[rt]); return; } if (sum[rt]==r-l+1) { return; } int mid=(l+r)>>1; if (l<=mid) update(lson,x,y); if (r>mid) update(rson,x,y); pushup(rt); } int query(int rt,int l,int r,int x,int y) { int ans=0; if(l==x&&r==y) { return sum[rt]; } int mid=(l+r)>>1; if(y<=mid) ans=query(lson,x,y); else if(x>mid) ans=query(rson,x,y); else { ans=query(lson,x,mid)+query(rson,mid+1,y); } pushup(rt); } void readdata() { scanf("%d",&n); build(1,1,n); cin>>m; for (int i=1;i<=m;i++) { scanf("%d%d%d",&x,&l,&r); { if (x==0) { update(1,1,n,l,r); } if (x==1) { printf("%d",query(1,1,n,l,r)); } } } } void o_o() { } void T_T() { } int main() { readdata(); }
相关文章推荐
- 你听说过哪些坑人 or 赚钱的歪点子?真是骗局太多,傻子都不够用啊!
- SqlServer_Sql防止注入
- 通用权限管理设计 之 数据库结构设计
- mariadb多源复制中只同步1个库
- Using Visual Studio to Debug JavaScript in IE
- 破解Idea 16注册机
- 相机模型与标定(十二)--opencv圆形标志点检测算法
- python 实战 登录注册
- html img图片标签alt和title属性
- 3326顺序表应用3:元素位置互换之移位算法
- 孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(十五)——JSP基础语法 任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语
- 欢迎使用CSDN-markdown编辑器
- error C2665: 2 个重载中没有一个可以转换所有参数类型
- Unity实现画线条功能
- [LeetCode练习题-C语言]169. Majority Element
- 谈谈maven配置
- properties文件中中文不能显示或者中文乱码
- 翻译-In-Stream Big Data Processing 流式大数据处理
- 【整理】HTML5中为地址栏添加Logo
- C++继承方式梳理