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

本文共 1860 字,大约阅读时间需要 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;}

转载地址:http://hldml.baihongyu.com/

你可能感兴趣的文章
[LeetCode] Redundant Connection II 冗余的连接之二
查看>>
这个博客第二次过年了
查看>>
HDU 2516 取石子游戏(斐波那契博弈)
查看>>
Nginx网站常见的跳转配置实例
查看>>
GitFlow工作流常用操作流程
查看>>
asp.net跳出iframe结构转向登录
查看>>
QTTabBar
查看>>
说出JAVA中一些常用的类,包,接口,请各举5个~~~
查看>>
MODBUS协议整理——功能码简述
查看>>
eclipse里maven项目An error occurred while filtering resources解决办法
查看>>
MySQL导入SQL文件及常用命令
查看>>
java基础-引用数据类型之二维数组(Array)
查看>>
openfalcon的安装和使用
查看>>
Swift编程语言学习1.7——断言
查看>>
Math.round(),Math.ceil(),Math.floor()的区别
查看>>
Spring知识结构
查看>>
16.QT-QMap和QHash解析
查看>>
IdentityServer4实战 - AccessToken 生命周期分析
查看>>
小程序返回顶部top滚动
查看>>
(一)Hadoop 计算框架的特性
查看>>