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这样的网络库,管理好请求线程和队列,再自动做一些数据 ...
随机推荐
- 安装MicroStation软件、Terrasolid插件的方法
本文介绍在Win10电脑中,安装MicroStation软件与Terrasolid插件合集的详细方法. 首先,我们需要有MicroStation软件与Terrasolid插件合集的安装包:这些 ...
- iframe访问页面,出现 ERR_BLOCKED_BY_RESPONSE
那是因为服务器输出了 X-Frame-Options 头,只要把这个头删除掉,就没问题了
- Qt5.9 UI设计(三)——添加UI、类及资源文件
前言 设计一个软件,最简单的方式就是把控件直接往UI上放,然后再把功能实现了.这样可以实现基本的功能,但是界面不能缩放,如果拖动软件改变界面的大小,界面上的控件就会乱成一团,或者是界面的控件压根就不会 ...
- [转帖]windows10彻底关闭Windows Defender的4种方法
https://zhuanlan.zhihu.com/p/495107049 Windows Defender是windows10系统自带的杀毒软件.默认情况下它处于打开的状态.大多数第三方的杀毒软件 ...
- [转帖]ORACLE 并行(PARALLEL)实现方式及优先级
http://blog.itpub.net/25542870/viewspace-2120924/ 一. Parallel query 默认情况下session 是ENABLE状态 1. ...
- [转帖]TiDB Lightning 在数据迁移中的应用与错误处理实践
TiDB Lightning 在数据迁移中的应用与错误处理实践 作者简介:DBA,会点 MySQL,懂点 TiDB,Python. 个人主页:https://tidb.net/u/seiang/ans ...
- [转帖]使用 TiDB 读取 TiFlash
https://docs.pingcap.com/zh/tidb/stable/use-tidb-to-read-tiflash 本文档介绍如何使用 TiDB 读取 TiFlash 副本. TiDB ...
- [转帖]JMeter 5.5 使用详解(持续更新中......)
https://blog.csdn.net/qq_45138120/article/details/124056704?ops_request_misc=%257B%2522request%255Fi ...
- [转帖]Prometheus 都可以采集那些指标?-- 常用 Exporter 合集
Prometheus 可以通过各种 Exporter 来获取很多指标,并且只要符合 Prometheus 规范的都可以获取到,本文汇总一些常用的采集器到这里. Prometheus Exporter ...
- 数据结构与算法 第一章(48课时课程笔记)Data Structure and Algorithms
数据结构基础知识 数据(Data):是对信息的一种符号表示.在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称.数据元素(Data Element):是数据的基本单位,在计算机程序中 ...