模板:线段树(1)点修改
2016-03-15 19:37
405 查看
有点愚蠢。。。就稍微记录一下吧
//线段树记录区间最小值,minv数组为线段树中节点,A数组记录每个点的值 int ql,qr;//查询[ql,qr]中的最小值 int query(int o,int l,int r){ int m = l + (r-l)/2, ans = INF; if(ql <= l && r <= qr) return minv[o];//当前节点完全包含在查询区间内 if(ql <= m) ans = min(ans, query(o*2, l, m));//往左走 if(m<qr) ans = min(ans, query(o*2+1, m+1, r));//往右走 return ans; } int p,v;//修改:A[p] = v; void update(int o, int l, int r){ int m = l + (r-l)/2; if(l == r) minv[o] = v; else { //l < r //先递归更新左子数或者右子树 if(p <= m) update(o*2, l, m); else update(o*2+1, m+1, r); //然后计算本节点的minv minv[o] = min(minv[o*2], minv[o*2+1]); } } void creat(int o, int l, int r){ //建树 if(l == r){ minv[o] = A[l]; return; } int m = l + (r-l)/2; creat(o*2, l, m); creat(o*2+1, m+1, r); minv[o] = min(minv[o*2], minv[o*2+1]); }
相关文章推荐
- W3C下的冒泡和捕获机制
- bzoj 2705: [SDOI2012]Longge的问题 【欧拉函数求GCD】
- Red Hat 7.2 RPM安装Mysql 5.7.11
- 第三周项目3—穷举法解决组合问题(换分币)
- 希尔排序-nlogn
- 十步完全理解SQL(转)
- cocos2dx 自己主动加入cpp文件到android.mk
- 建造者模式(Builder Pattern)
- 注册Github
- codeforces 637B B. Chat Order(map,水题)
- 并发(Concurrent)与并行(Parallel)
- socket连接和http连接的区别
- bzoj 1257: [CQOI2007]余数之和sum 【数学 分块统计】
- 安卓实现定位功能的4种方式
- bzoj 1041: [HAOI2008]圆上的整点 【数学 思维】
- Alec jacobson thesis analysis
- android——.9图片
- 求最大公因子-欧几里德算法
- 对分查找-logN
- 第一次写博客,想了很久要给自己留一个什么样的开始