JZOJ 3571. 【GDKOI2014】内存分配
解析


也就是说建一棵权值线段树维护这些信息。要注意的是每次的最优解必然是 \(b\) 小的先做,故离线排序确定离散后的下标再依次求解
\(Code\)
#include<cstdio>
#include<algorithm>
#define ls (k << 1)
#define rs (ls | 1)
#define LL long long
using namespace std;
const int N = 200005;
int n , m , rd[N];
struct node{
int a , b , id , k;
}e[N] , ind[N];
struct segment{
LL a , b;
}seg[N << 2];
inline bool cmp1(node x , node y){return x.b < y.b;}
inline void insert(int l , int r , int k , int x , segment y)
{
if (l == r)
{
seg[k].a = y.a , seg[k].b = y.b;
return;
}
int mid = (l + r) >> 1;
if (x <= mid) insert(l , mid , ls , x , y);
else insert(mid + 1 , r , rs , x , y);
seg[k].a = seg[ls].a + seg[rs].a;
seg[k].b = max(seg[ls].b , seg[rs].b - seg[ls].a);
}
int main()
{
scanf("%d%d" , &n , &m);
for(register int i = 1; i <= n; i++) scanf("%d%d" , &e[i].a , &e[i].b) , e[i].id = i , ind[i] = e[i];
for(register int i = 1; i <= m; i++)
scanf("%d%d%d" , &e[i + n].k , &e[i + n].a , &e[i + n].b) , e[i + n].id = i + n , ind[i + n] = e[i + n];
sort(ind + 1 , ind + n + m + 1 , cmp1);
for(register int i = 1; i <= n + m; i++) rd[ind[i].id] = i;
for(register int i = 1; i <= n; i++) insert(1 , n + m , 1 , rd[e[i].id] , segment{e[i].a , e[i].b});
for(register int i = 1; i <= m; i++)
{
insert(1 , n + m , 1 , rd[e[i + n].k] , segment{0 , 0});
insert(1 , n + m , 1 , rd[e[i + n].id] , segment{e[i + n].a , e[i + n].b});
rd[e[i + n].k] = rd[e[i + n].id];
printf("%d\n" , seg[1].b);
}
}
JZOJ 3571. 【GDKOI2014】内存分配的更多相关文章
- 【GDKOI2014】JZOJ2020年8月13日提高组T4 内存分配
[GDKOI2014]JZOJ2020年8月13日提高组T4 内存分配 题目 Description Input Output 输出m行,每行一个整数,代表输入中每次程序变化后系统所需要的空闲内存单位 ...
- 《深入理解Java虚拟机》内存分配策略
上节学习回顾 1.判断对象存活算法:引用计数法和可行性分析算法 2.垃圾收集算法:标记-清除算法.复制算法.标记-整理算法 3.垃圾收集器: Serial:新生代收集器,采用复制算法,单线程. Par ...
- Java的内存分配
java内存分配 A:栈 存储局部变量 B:堆 存储所有new出来的 C:方法区(方法区的内存中) 类加载时 方法信息保存在一块称为方法区的内存中, 并不随你创建对象而随对象保存于堆中; D:本地方法 ...
- C语言内存分配方法。
当C程序运行在操作系统上时,操作系统会给每一个程序分配一定的栈空间. 堆为所有程序共有的,需要时需要申请访问. 一.栈 局部变量.函数一般在栈空间中. 运行时自动分配&自动回收:栈是自动管理的 ...
- JVM内存分配策略
在 JVM内存垃圾回收方法 中,我们已经详细讨论了内存回收,但是,我们程序中生成的对象是如何进行分配的呢?以下所述针对的是HotSpot虚拟机. 1.Java堆结构 以HotSpot为例,如下图: H ...
- Java的垃圾回收和内存分配策略
本文是<深入理解Java虚拟机 JVM高级特性与最佳实践>的读书笔记 在介绍Java的垃圾回收方法之前,我们先来了解一下Java虚拟机在执行Java程序的过程中把它管理的内存划分为若干个不 ...
- Buddy内存分配算法
Buddy(伙伴的定义): 这里给出伙伴的概念,满足以下三个条件的称为伙伴:1)两个块大小相同:2)两个块地址连续:3)两个块必须是同一个大块中分离出来的: Buddy算法的优缺点: 1)尽管伙伴内存 ...
- 小白请教几个关于Java虚拟机内存分配策略的问题
最近在看周志明所著的<深入理解Java虚拟机>,有几个问题不太明白,希望对虚拟机有研究的哥们儿帮我解答一下.先说一下我进行试验的环境: 操作系统:Mac OS X 10.11.6 EI C ...
- Linux内核笔记--内存管理之用户态进程内存分配
内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...
- Linux内核笔记——内存管理之块内存分配
内核版本:linux-2.6.11 伙伴系统 伙伴系统是linux用于满足对不同大小块物理内存分配和释放请求的解决方案. 内存管理区 linux将物理内存分成三个内存管理区,分别为ZONE_DMA Z ...
随机推荐
- redux原理分享
概述 一个状态管理工具 Store:保存数据的地方,你可以把它看成一个容器,整个应用只能有一个 Store. State:包含所有数据,如果想得到某个时点的数据,就要对 Store 生成快照,这种时点 ...
- Vue2基本组件间通信
Vue2组件通信的基础方式 自己的理解:组件化通信,无非就是数据你传我,我传你,两个组件的相互交流,方法很多,下方有图示(此篇建议小白阅读,大神的话也不会看,哈哈哈哈!仅供参考,有不同的意见可以一起交 ...
- jQuery 十三中选择器总结
<body style="overflow: scroll;"> <h1>我的测试</h1> <div id="111" ...
- ArcGIS QGIS学习二:图层如何只显示需要的部分几何面数据(附最新坐标边界下载全国省市区县乡镇)
目录 前言 准备SHP数据 ArcMap 的筛选 QGIS 的筛选 如何编写查询条件 前言 当我们用GIS软件打开一个SHP文件的时候,会显示出里面全部的几何图形,假如我只想要其中的一部分数据显示出来 ...
- ArcGISServer 10.4 虚拟机 安装 新建站点失败 Failed to configure the server machine ''. Server machine '' is not a local
在通过 VMware 创建的虚拟机上(win7 64位)安装ArcServer 10.4,新建站点时出现下面的错误. Failed to configure the server machine ' ...
- 同步异步、mutiprocessing创建进程process模块及进程对象的多种方法、消息队列Queue
目录 同步异步 阻塞与非阻塞 综合使用 创建进程的多种方式之multiprocess.process模块 进程间数据隔离 进程的join方法 IPC机制 生产者 消费者模型 进程对象的多种方法 守护进 ...
- css images图片铺满 不变型 以及头像裁剪 属性
一,图片的引入 background:url(img_flwr.gif); background-repeat:no-repeat; //平铺 二,图片的大小不不变形 background-size: ...
- day14-功能实现13
家居网购项目实现013 以下皆为部分代码,详见 https://github.com/liyuelian/furniture_mall.git 32.功能30-会员不能登录后台管理 32.1需求分析/ ...
- NOIP2022 退役记
无所谓,我还能卡队线. 无所谓,我还能被卡校线.
- 真正“搞”懂HTTP协议07之body的玩法(实践篇)
我真没想到这篇文章竟然写了将近一个月,一方面我在写这篇文章的时候阳了,所以将近有两周没干活,另外一方面,我发现在写基于Node的HTTP的demo的时候,我不会Node,所以我又要一边学学Node,一 ...