NC20951 网络优化
题目
题目描述
《梦三国2》是一款3D MOBA类网游。游戏继承《梦三国》的三国文化背景和基础玩法,并加入许多全新地图和全新竞技玩法。由于人气高,游戏在线人数与日俱增,我们知道当在线人数不断增长的时候,会给服务器带来巨大的压力。
已知该游戏中共有n名用户,编号从1到n,服务器共有m条服务线,每个用户最多只能登陆一条线,第i条线最多可以容纳v[i]名用户同时在线,且只能给编号在[l[i],r[i]]范围内的用户提供服务。现在希望找出一种合理的资源分配方案,使得同时在线人数最大化,请输出这个最大人数。
输入描述
数据组数不超过10
对于每组数据。
第一行包括两个正整数n,m(1<=n,m<=10000)
接下来m行,每行三个整数l[i],r[i],v[i]
输出描述
对于每组数据输出一个正整数,即最多容纳的用户数量
示例1
输入
5 3
1 1 1
2 4 2
2 3 2
输出
4
说明
我们可以让1号服务线服务用户1,2号服务线服务用户4,3号服务线服务用户2和3
题解
知识点:贪心,优先队列。
第一个想到的贪心是让区间的右端点从小到大排序,然后从第一个人开始遍历,看看在不在这个区间。因为这样做前面的人匹配到靠前的线路,可以让更多后面的人有机会匹配到线路。若是人的编号超过右端点了,对于这个人,这条线路就用不了了,可以丢了。
但还需要注意左端点,因为假设左端点够不到某个人,但其右端点是靠前的,那对于后面能用的人这个线路就被扔掉了,是浪费了。因此我们要对每个人,把从他开始的线路,即左端点刚好是他编号的线路,先放入优先队列按右端点从小到大排序,这样优先队列里参与匹配的线路就都是够得到当前点,且是按右端点排序好的。
所以我们一开始把线路按左端点从小到大排序,遇到一个人就把从他开始的线路加入优先队列,这样选的时候就都是够得到的线路。再把有效的线路按右端点从小到大排序,尽可能用掉右端点靠前的线路,少占用右端点靠后的线路,给后面人留机会。最后编号超过队头右端点就可以弹出队头,因为这条线路不可能用得到了。
注意,没用完的线路要放回队列。
时间复杂度 \(O(n \log n)\)
空间复杂度 \(O(n)\)
代码
#include <bits/stdc++.h>
using namespace std;
struct node {
int l, r, v;
}a[10007];
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, m;
while (cin >> n >> m) {
for (int i = 0;i < m;i++) cin >> a[i].l >> a[i].r >> a[i].v;
sort(a, a + m, [&](node a, node b) {return a.l < b.l;});
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
int ans = 0;
for (int i = 1, pos = 0;i <= n;i++) {
while (!pq.empty() && pq.top().first < i) pq.pop();
while (pos < m && a[pos].l == i) {
pq.push({ a[pos].r,a[pos].v });
pos++;
}
if (!pq.empty()) {
ans++;
pair<int, int> x = pq.top();
pq.pop();
x.second--;
if (x.second) pq.push(x);
}
}
cout << ans << '\n';
}
return 0;
}
NC20951 网络优化的更多相关文章
- 为重负网络优化 Nginx 和 Node.js --引用自https://linux.cn/article-1314-1.html
为重负网络优化 Nginx 和 Node.js 在搭建高吞吐量web应用这个议题上,NginX和Node.js可谓是天生一对.他们都是基于事件驱动模型而设计,可以轻易突破Apache等传统web服务器 ...
- 【网络流24题】 No.10 餐巾计划问题 (线性规划网络优化 最小费用最大流)
[题意] 一个餐厅在相继的 N 天里, 每天需用的餐巾数不尽相同. 假设第 i 天需要 ri 块餐巾(i=1,2,-, N). 餐厅可以购买新的餐巾,每块餐巾的费用为 p 分:或者把旧餐巾送到快洗部, ...
- HttpClient 网络优化
HttpClient 网络优化 尽管Android官网推荐在2.3及后续版本中使用HttpURLConnection作为网络开发首选类,但在连接管理和线程安全方面,HttpClient还是具有很大优势 ...
- KVM虚拟化网络优化技术总结
https://www.intel.com/content/dam/www/public/us/en/documents/technology-briefs/sr-iov-nfv-tech-brief ...
- Android 网络优化,使用 HTTPDNS 优化 DNS,从原理到 OkHttp 集成
一.前言 谈到优化,首先第一步,肯定是把一个大功能,拆分成一个个细小的环节,再单个拎出来找到可以优化的点,App 的网络优化也是如此. 在 App 访问网络的时候,DNS 解析是网络请求的第一步,默认 ...
- 融云亮相GDG谷歌女性开发者大会 揭秘IMSDK网络优化策略
4 月 20 日,冷雨阻碍不了天津GDG谷歌女性开发者大会的热烈召开,一众开发者.架构师和科技公司创业者云集一堂,就女性开发者的技术.职场.人生多方面话题展开深入探讨.活动由GDG (谷歌开发者社区) ...
- 移动端IM开发者必读(二):史上最全移动弱网络优化方法总结
1.前言 本文接上篇<移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”>,关于移动网络的主要特性,在上篇中已进行过详细地阐述,本文将针对上篇中提到的特性,结合我们的实践经 ...
- TensorFlow笔记-07-神经网络优化-学习率,滑动平均
TensorFlow笔记-07-神经网络优化-学习率,滑动平均 学习率 学习率 learning_rate: 表示了每次参数更新的幅度大小.学习率过大,会导致待优化的参数在最小值附近波动,不收敛:学习 ...
- TensorFlow笔记-06-神经网络优化-损失函数,自定义损失函数,交叉熵
TensorFlow笔记-06-神经网络优化-损失函数,自定义损失函数,交叉熵 神经元模型:用数学公式比表示为:f(Σi xi*wi + b), f为激活函数 神经网络 是以神经元为基本单位构成的 激 ...
- 移动 APP 网络优化概述
一般开发一个 APP,会直接调用系统提供的网络请求接口去服务端请求数据,再针对返回的数据进行一些处理,或者使用AFNetworking/OKHttp这样的网络库,管理好请求线程和队列,再自动做一些数据 ...
随机推荐
- APB Slave Mux
基于APB slave mux我们可以快速地将多个apb slave连接在APB上面.在实际的设计当中都是采用这样的方式连接多个APB slave的 DECODE4BIT - 可以理解为master接 ...
- 05-Shell索引数组变量
1.介绍 Shell 支持数组(Array),数组是若干数据的集合,其中的每一份数据都称为数组的元素. 注意Bash Shell 只支持一维数组,不支持多维数组. 2.数组的定义 2.1 语法 在 S ...
- Keep English Level-03
rule -- 统治,管理,规章,制度 ruling -- 裁决 ruler -- 统治者,尺子 district judge -- 地方法官 sweeping -- 一刀切的 haul --拉 ov ...
- SQLServer的varchar与nvarchar的学习之二
SQLServer的varchar与nvarchar的学习之二 背景 昨天简单总结了多种数据库 varchar和nvarchar的区别与关系 今天想着能够分析一下数据库文件. 计划使用winhex 查 ...
- [转帖]TiDB 整体架构
https://docs.pingcap.com/zh/tidb/stable/tidb-architecture 与传统的单机数据库相比,TiDB 具有以下优势: 纯分布式架构,拥有良好的扩展性,支 ...
- [转帖]LSM树详解
https://zhuanlan.zhihu.com/p/181498475 LSM树(Log-Structured-Merge-Tree)的名字往往会给初识者一个错误的印象,事实上,LSM树并不像B ...
- [转帖]自动化配置SSH免密登录和取消SSH免密配置脚本
1. 前文 搭建了一套有多台主机的局域网环境,不完全考虑安全性的情况下,为方便管理局域网内主机,配置SSH免密登录,因主机较多,前阵子针对配置ssh免密和取消ssh免密功能单独写了脚本来自动化批量部署 ...
- [转帖]备份VCSA内置Postgresql数据库
首先命令行远程登录到VCSA服务器,然后执行如下命令停掉VCSA的核心服务vmware-vpxd: vCenterServerAppliance:~ # service vmware-vpxd sto ...
- React数据通信父传子和子传父的使用
组件中的props 在react中,props的特点是: 1.可以给组件传递任意类型的数据 2.props是只读的对象,只能够读取属性的值,无法修改对象 如过我们强行修改数据,会报错,告诉我们该属性是 ...
- 【JS 逆向百例】WebSocket 协议爬虫,智慧树扫码登录案例分析
关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后 ...