博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spoj 2713 Can you answer these queries IV 水线段树
阅读量:6656 次
发布时间:2019-06-25

本文共 1960 字,大约阅读时间需要 6 分钟。

题目链接:

题意:

给定n长的序列

以下2个操作

0 x y 给[x,y]区间每一个数都 sqrt

1 x y 问[x, y] 区间和

#include 
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define ll long long#define N 100005#define L(x) tree[x].l#define R(x) tree[x].r#define Lson(x) (x<<1)#define Rson(x) (x<<1|1)#define Num(x) tree[x].num#define Sum(x) tree[x].suminline int Mid(int x, int y){return (x+y)>>1;}struct Subtree{ int l, r; ll num, sum;}tree[N<<2];ll a[N];void push_up(int id){ if(L(id) == R(id))return; Sum(id) = Sum(Lson(id)) + Sum(Rson(id)); if(Num(Lson(id)) <= 1 && Num(Rson(id)) <= 1) Num(id) = 1; else Num(id) = 2;}void build(int l, int r, int id){ L(id) = l; R(id) = r; if(l == r) { Num(id) = Sum(id) = a[l]; return ;} int mid = Mid(l, r); build(l, mid, Lson(id)); build(mid+1, r, Rson(id)); push_up(id);}void updata(int l, int r, int id){ if(L(id) == R(id)) { Sum(id) = Num(id) = (ll)sqrt((double)Sum(id)); return ; } if(l == L(id) && R(id) == r && Num(id) <= 1) return ; int mid = Mid(L(id), R(id)); if(mid < l) updata(l, r, Rson(id)); else if(r <= mid) updata(l, r, Lson(id)); else { updata(l, mid, Lson(id)); updata(mid+1, r, Rson(id)); } push_up(id);}ll query(int l, int r, int id){ if(l == L(id) && R(id) == r) return Sum(id); int mid = Mid(L(id), R(id)); if(mid < l) return query(l, r, Rson(id)); else if(r <= mid) return query(l, r, Lson(id)); else return query(l, mid, Lson(id)) + query(mid+1, r, Rson(id));}int n;void solve(){ int q, op, x, y; for(int i = 1; i <= n; i++)scanf("%lld", &a[i]); build(1, n, 1); scanf("%d",&q); while(q--){ scanf("%d %d %d", &op, &x, &y); if(x > y) swap(x, y); if(op == 0) updata(x, y, 1); else printf("%lld\n", query(x, y, 1)); }}int main(){ int Cas = 1; while(~scanf("%d", &n)){ printf("Case #%d:\n", Cas++); solve(); puts(""); } return 0;}
本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5198479.html,如需转载请自行联系原作者
你可能感兴趣的文章
基于OGG Datahub插件将Oracle数据同步上云
查看>>
聊聊jdk httpclient的connect timeout异常
查看>>
SaaS成熟度模型分级
查看>>
缓存专题
查看>>
安装MySQL两种安装方式
查看>>
snowflake
查看>>
笔试面试找工作个人总结(持续更新)
查看>>
硬链接和软连接
查看>>
从源码解析LinkedList集合
查看>>
echarts 动态生成多条折线图和动态获得x轴并于数字相对应
查看>>
C# .net core 使用new HMAC***()替代KeyedHashAlgorithm.Create
查看>>
wordpress url重写 htaccess 支持分页
查看>>
Python 之 不同目录间进行模块调用
查看>>
Lua中的捕获
查看>>
怎么找到属性0字节机械硬盘的数据
查看>>
docker 制作镜像
查看>>
企业微信二次开发之-如何获取secret序列号
查看>>
vmware虚拟centos7系统NAT模式下初次登陆无法上网
查看>>
第十一期 小型企业自动分配IP地址和不同网段通信
查看>>
JavaScript函数式编程之记忆(memorize)
查看>>