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这样的网络库,管理好请求线程和队列,再自动做一些数据 ...
随机推荐
- 01-UPF介绍
Mainstream Low Power techniques clock gating - 低功耗的设计风格,4bit以上可以通过综合工具增加ICG APR的时候可以更换器件VT Advanced ...
- ASIC 功能验证VTB
目标 设计流程 验证设计文档和RTL code之间的关系 RTL code(DUT) - 可以当作是一个黑盒,DUT内部是完全不可见的 白盒验证 - DUT内部RTL完全可见 灰盒验证 - DUT内部 ...
- 【一文秒懂】Ftrace系统调试工具使用终极指南
[一文秒懂]Ftrace系统调试工具使用终极指南 1.Ftrace是什么 Ftrace是Function Trace的简写,由 Steven Rostedt 开发的,从 2008 年发布的内核 2.6 ...
- 【收集】embed
序 链接 备注 1 适用于嵌入式单片机的差分升级通用库+详细教程_风吹花中花吹风的博客-CSDN博客 差分升级包制作与还原 2 前言 · 给新手的两轮自平衡小车开发实战指南 (miaowlabs.co ...
- [转帖]Oracle的审计
AUDIT_TRAIL 初始化参数AUDIT_TRAIL用于控制数据库审计,默认值为none. 参数类型: String 默认值: none 允许动态修改: 否 基本参数: 否 语法: AUDIT_T ...
- [转帖]Linux常用的一些命令,看你知道多少?
https://zhuanlan.zhihu.com/p/115279009 Linux中命令有很多,而Linux系统中使用命令也是它的一大特点.在Linux系统中使用命令处理问题灵活,高效,所以熟知 ...
- 【转帖】nginx变量使用方法详解-8
https://www.diewufeiyang.com/post/582.html 与 $arg_XXX 类似,我们在 (二) 中提到过的内建变量 $cookie_XXX 变量也会在名为 XXX 的 ...
- 《SAIS Supervising and Augmenting Intermediate Steps for Document-Level Relation Extraction》论文阅读笔记
代码 原文地址 预备知识: 1.什么是标记索引(token indices)? 标记索引是一种用于表示文本中的单词或符号的数字编码.它们可以帮助计算机理解和处理自然语言.例如,假如有一个字典{ ...
- 热更新适配ibatis原理浅析
一.热更新解决了什么问题? 在研发过程中,每个研发同学在联调.自测阶段中总会频繁的去执行编译.构建.打包的动作,遇到比较大的项目,执行一套流程下来,往往需要3-10分钟左右,极大的降低了研发的速度,基 ...
- css3写一个加载动画
先制作一个正方形,让圆点在正方形的最外侧 <style> body { margin: 0; } .loading { width: 200px; height: 200px; backg ...