【线段树区间单点更新加约束条件】HDU
来源:互联网 发布:淘宝网店图片处理软件 编辑:程序博客网 时间:2024/06/10 22:48
Problem Description
给你一个n,接下来有n个数,给你m个操作,操作分为0的时候对区间L,R内的所有元素开根号,1的时候求区间L,R所有元素的和
思路:因为最大的数2的63次方,开根号也就7,8次这样就为1开不了了。所以约束条件就是(判断如果该区间元素都是1的话,就不继续递归了)
#include<bits/stdc++.h>using namespace std;struct node{ long long data;};#define MID int mid = (l + r) / 2#define lson root << 1#define rson root << 1 | 1node tree[400000];node Merge(node x, node y)//归并求和{ node t; t.data = x.data + y.data; return t;}void build(int root, int l, int r)//初始化建树{ if(l == r) { scanf("%lld", &tree[root].data); return ; } MID; build(lson, l, mid); build(rson, mid + 1, r); tree[root] = Merge(tree[lson], tree[rson]);}void updata(int root, int l, int r, int ul, int ur)//更新区间ul,ur的值{ if(tree[root].data > (r - l + 1)) {//约束条件(判断区间里面的元素是否全为1) if(l == r)//单点更新 { tree[root].data = sqrt(tree[root].data); return ; } MID; if(mid >= ul) updata(lson, l, mid, ul, ur); if(mid < ur) updata(rson, mid + 1, r, ul, ur); tree[root] = Merge(tree[lson], tree[rson]); }}long long query(int root, int l, int r, int ul, int ur)//求区间ul-ur的和{ if(ul <= l && r <= ur) return tree[root].data; MID; long long red = 0; if(mid >= ul) red += query(lson, l, mid, ul, ur); if(mid < ur) red += query(rson, mid + 1, r, ul, ur); return red;}int main(){ int n, m, cas = 1; while(~scanf("%d", &n)) { build(1, 1, n); printf("Case #%d:\n", cas++); scanf("%d", &m); while(m--) { int num, ul, ur; scanf("%d %d %d", &num, &ul, &ur); if(ul > ur) swap(ul, ur); if(num) { printf("%lld\n", query(1, 1, n, ul, ur)); } else updata(1, 1, n, ul, ur); } printf("\n"); } return 0;}
阅读全文
0 0
- 【线段树区间单点更新加约束条件】HDU
- 【线段树区间单点更新加约束条件】Range Minimum Queries CodeChef
- hdu 3308 LCIS (线段树+单点更新+区间合并)
- 线段树 hdu 1166 敌兵布阵 单点更新区间求和
- HDU 2795 线段树(单点更新 区间查询)
- hdu 3308 线段树单点更新 区间合并
- HDU 2795 Billboard (线段树 单点更新 区间求最大值)
- HDU 4819:单点更新,区间查询的二维线段树
- hdu 4046 Panda (线段树 单点更新 区间查询)
- hdu.3308 LCIS(线段树,区间合并+单点更新)
- HDU 4302 线段树单点更新,维护区间最大最小值
- hdu 4046 Panda (线段树,单点更新,区间求和)
- 线段树 单点更新查询 区间最大值 hdu 2795 Billboard
- HDU 1166 线段树的单点更新 区间求和
- HDU 1754 线段树单点更新 区间最值
- HDU 1540 Tunnel Warfare(线段树 区间合并 +单点更新)
- HDU 3308 LCIS(线段树区间合并 单点更新)
- HDU 3874 Necklace(线段树啊 单点更新 区间求和)
- python代码优化
- 中国科技发展得越快石英晶振的需求量就越大
- Mongodb 数据文件结构
- 总结一下js里面的关键字
- ubuntu 下终端关于调试C++的命令
- 【线段树区间单点更新加约束条件】HDU
- Ubuntu16.04+caffe+digits安装配置
- 【hdoj 5294】 Tricks Device 【最小割+最短路spfa】
- docker swarm如何在指定节点运行service
- 挑战程序竞赛系列(28):3.5最小费用流
- 堆栈解释
- 微信用户登录
- 【Nova】nova-network网络模型之vlan网络
- 电影与Linux