博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线段树 大根堆 模版二合一
阅读量:5875 次
发布时间:2019-06-19

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

#include "stdafx.h"#include 
#include
#include
#define N 2000001using namespace std;inline void read_int(int &now_);class T_heap {private: int heap[N], num;public: void up(int now) { if (now <= 1) return; if (heap[now] > heap[now >> 1]) { swap(heap[now], heap[now >> 1]); up(now >> 1); } } void down(int now) { int next = now; if ((now << 1) <= num) { if (heap[now << 1] > heap[next]) { next = now << 1; } } if ((now << 1 | 1) <= num) { if (heap[now << 1 | 1] > heap[next]) { next = now << 1 | 1; } } if (now != next) { swap(heap[next], heap[now]); down(next); } } void push(int x) { heap[++num] = x; up(num); } void pop() { heap[1] = heap[num--]; down(1); } int top() { return heap[1]; }};class T_tree {public: int l, r, dis, flag, mid; void mid_() { mid = (l + r) >> 1; } void dis_() { read_int(dis); } void flag_() { flag = 0; }};class T_tree tree[N * 4];int n,if_z;char Cget;inline void read_int(int &now_){ now_ = 0,if_z=1, Cget = getchar(); while (Cget<'0' || Cget>'9') { if (Cget == '-') if_z = -1; Cget = getchar(); } while (Cget >= '0'&&Cget <= '9') { now_ = now_ * 10 + Cget - '0'; Cget = getchar(); } now_ *= if_z;}inline void tree_up(int now){ tree[now].dis = tree[now << 1].dis + tree[now << 1 | 1].dis;}inline void tree_down(int now){ if (tree[now].l == tree[now].r) return; tree[now << 1].flag += tree[now].flag; tree[now << 1].dis += tree[now].flag*(tree[now << 1].r - tree[now << 1].l + 1); tree[now << 1 | 1].flag += tree[now].flag; tree[now << 1 | 1].dis += tree[now].flag*(tree[now << 1 | 1].r - tree[now << 1 | 1].l + 1); tree[now].flag_();}void tree_build(int now, int l, int r){ tree[now].l = l, tree[now].r = r; if (l == r) { tree[now].dis_(); return; } tree[now].mid_(); tree_build(now << 1, l, tree[now].mid); tree_build(now << 1 | 1, tree[now].mid + 1, r); tree_up(now);}void tree_change(int now, int l, int r, int to){ if (tree[now].l == l&&tree[now].r == r) { tree[now].dis += (tree[now].r - tree[now].l + 1)*to; tree[now].flag += to; return ; } if (tree[now].flag) tree_down(now); if (l > tree[now].mid) tree_change(now << 1 | 1, l, r, to); else if (r <= tree[now].mid) tree_change(now << 1, l, r, to); else { tree_change(now << 1, l, tree[now].mid, to); tree_change(now << 1 | 1, tree[now].mid + 1, r, to); } tree_up(now);}int tree_query(int now, int l, int r){ if (tree[now].l == l&&tree[now].r == r) { return tree[now].dis; } if (tree[now].flag) tree_down(now); int return_=0; if (l > tree[now].mid) return_ = tree_query(now << 1 | 1, l, r); else if (r <= tree[now].mid) return_ = tree_query(now << 1, l, r); else { return_ += tree_query(now << 1, l, tree[now].mid); return_ += tree_query(now << 1 | 1, tree[now].mid + 1, r); } tree_up(now); return return_;}int main(){ return 0;}

 

转载于:https://www.cnblogs.com/IUUUUUUUskyyy/p/6260148.html

你可能感兴趣的文章
大战设计模式【11】—— 模板方法模式
查看>>
springBoot介绍
查看>>
Intellij IDEA 快捷键整理
查看>>
Redis 通用操作2
查看>>
性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项
查看>>
11. Spring Boot JPA 连接数据库
查看>>
洛谷P2925 [USACO08DEC]干草出售Hay For Sale
查看>>
MapReduce工作原理流程简介
查看>>
那些年追过的......写过的技术博客
查看>>
小米手机解锁bootload教程及常见问题
查看>>
Python内置函数property()使用实例
查看>>
Spring MVC NoClassDefFoundError 问题的解决方法。
查看>>
CentOS 6.9配置网卡IP/网关/DNS命令详细介绍及一些常用网络配置命令(转)
查看>>
python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
查看>>
C# 解决窗体闪烁
查看>>
CSS魔法堂:Transition就这么好玩
查看>>
【OpenStack】network相关知识学习
查看>>
centos 7下独立的python 2.7环境安装
查看>>
[日常] 算法-单链表的创建
查看>>
前端工程化系列[01]-Bower包管理工具的使用
查看>>