Busiest Computing Nodes

题意:

给k台洗衣机(洗衣机为[0, k - 1]),给n个按起始时间非递减的任务,每个任务有一个起始时间s和工作时间d,每个任务从s%k这个这个洗衣机开始往后找循环一下圈,找到第一个未工作的洗衣机,如果都不行就丢掉这个任务。问你哪个洗衣机处理的任务最多,有多个的话按字典序从小到大输出。

题解:

O(n2)O(n^2)O(n2)的暴力一定会T,这里考虑用线段树加二分来维护,从当位置开始到结尾每次check一下,如果区间最小成立的话,r = mid,这样就可以二分出答案了。

Code

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <set>
#include <queue>
#include <vector>
#include <map>
#include <unordered_map>
#include <cmath>
#include <stack>
#include <iomanip>
#include <deque>
#include <sstream>
#define x first
#define y second
using namespace std;
typedef long double ld;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef unsigned long long ULL;
const int N = 2e5 + 100, M = 2 * N, INF = 0x3f3f3f3f, mod = 1e9 + 7;
const double eps = 1e-8;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int h[N], e[M], ne[M], w[M], idx;
void add(int a, int b, int v = 0) {e[idx] = b, w[idx] = v, ne[idx] = h[a], h[a] = idx ++;
}
int n, m, k;
int mxx = -1;
PII a[N];
int b[N];
int res[N];
int ans[N];
int cnt = 1;
struct Node {int l, r;LL mn;
}tr[N << 2];
void push(int u) {tr[u].mn = min(tr[u << 1].mn, tr[u << 1 | 1].mn);
}
void build(int u, int l, int r) {tr[u] = {l, r};if (l == r) {tr[u].mn = 0;return ;}int mid = l + r >> 1;build(u << 1, l, mid), build(u << 1 | 1, mid + 1, r);push(u);
}
void update(int u, int pos, int p) {if (tr[u].l == tr[u].r) {tr[u].mn = a[p].x + a[p].y;b[pos] = a[p].x + a[p].y;res[pos] ++, mxx = max(mxx, res[pos]);return ;}int mid = tr[u].l + tr[u].r >> 1;if (pos <= mid) update(u << 1, pos, p);else            update(u << 1 | 1, pos, p);push(u);
}
int query(int u, int l, int r) {if (l <= tr[u].l && tr[u].r <= r) return tr[u].mn;int mid = tr[u].l + tr[u].r >> 1;int mx = INF;if (l <= mid)  mx = query(u << 1, l, r);if (r > mid)   mx = min(mx, query(u << 1 | 1, l, r));return mx;
}
int main() {ios::sync_with_stdio(false), cin.tie(0);cin >> k >> n;for (int i = 0; i < n; i ++ ) {int s, d;cin >> s >> d;if (a[cnt - 1].x == s) a[cnt - 1].y = min(a[cnt - 1].y, d);else a[cnt] = {s, d}, cnt ++;}cnt --;build(1, 1, k);for (int i = 1; i <= cnt; i ++ ) {int pos = (i - 1) % k + 1;int l = pos, r = k;while (l < r) {int mid = l + r >> 1;if (query(1, pos, mid) <= a[i].x)  r = mid;else                               l = mid + 1;}if (b[l] <= a[i].x) update(1, l, i);else {l = 1, r = pos;while (l < r) {int mid = l + r>> 1;if (query(1, 1, mid) <= a[i].x) r = mid;else l = mid + 1;}if (b[l] <= a[i].x) update(1, l, i);}}int t = 0;for (int i = 1; i <= k; i ++ ) if (res[i] == mxx) ans[t ++] = i - 1;for (int i = 0; i < t - 1; i ++ ) cout << ans[i] << ' ';cout << ans[t - 1];return 0;
}
// 小于等于的第一个

Busiest Computing Nodes相关推荐

  1. The 2021 ICPC Asia Regionals Online Contest (I)

    The 2021 ICPC Asia Regionals Online Contest (I) 写了一晚上,日- 文章目录 一. A Busiest Computing Nodes 二.D Edge ...

  2. 2021icpc网络赛

    I. Neighborhood Search 题意: 第一行是一个集合,第二行与第三行分别输入 A , r A,r A,r输出集合中 A − r , A + r A-r,A+r A−r,A+r的值. ...

  3. 2021ICPC网络赛 记录

    PTA | 程序设计类实验辅助教学平台 滑铁卢了 I和A各卡了两个小时 最后两个线段树的题都是因为自己写错了树而错的 队友思路突突得出 自己bug砰砰的调 A Busiest Computing No ...

  4. 边缘计算Edage Computing

    1.边缘计算的定义 边缘计算是指在靠近物或数据源头的一侧,采用网络.计算.存储.应用核心能力为一体的开放平台,就近提供最近端服务. 其应用程序在边缘侧发起,产生更快的网络服务响应,满足行业在实时业务. ...

  5. Hadoop - MapReduce

    下载本文(PDF版). MapReduce is a framework using which we can write applications to process huge amounts o ...

  6. 2020年 ICLR 国际会议最终接受论文(poster-paper)列表(二)

    来源:AINLPer微信公众号(点击了解一下吧) 编辑: ShuYini 校稿: ShuYini 时间: 2020-02-21     2020年的ICLR会议将于今年的4月26日-4月30日在Mil ...

  7. MassGrid虚拟机网络Alpha版上线体验

    MassGrid是一个基于区块链技术的分布式计算网络,MassGrid能将分散在世界各地的硬件计算资源虚拟化成为分布式计算网络中的节点,用户可使用该计算网络访问无限量的计算资源进行机器学习.大数据.渲 ...

  8. Drynx: 基于区块链的去中心化隐私保护机器学习系统

    该文章转载自本人的知乎专栏,有兴趣的小伙伴可以来我的专栏学习更多相关知识,包含了同态加密.安全多方计算.机器学习和联邦学习.近世代数等.下面是我的知乎文章首页,可以点专栏去查看确定方向的文章.所有相关 ...

  9. 怎么用Python绘制这样的图?

    我是小z 最近看到一张图,感觉很酷炫,搜索得知是叫做弦图.看到很多用R语言绘制的案例,以及有Excel大佬用VBA也绘制了一个,简直不要太强. 那么,Python可以绘制吗?找了一圈发现有一个付费的第 ...

  10. 【阅读】A Comprehensive Survey on Distributed Training of Graph Neural Networks——翻译

    转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] (本文中,涉及到公式部分的翻译不准确,请看对应原文.) 另一篇:[阅读]Distributed Graph Neural Networ ...

最新文章

  1. 兄弟,用大白话给你讲小白都能看懂的分布式系统容错架构
  2. 送你一份 Kubernetes 实用命令速查表
  3. Go的变量到底在堆还是栈中分配
  4. 专属个人的聊天机器人的实现——图灵机器人
  5. angularjs 1.x $q模块使用
  6. 前端编程之jQuery
  7. Linux中写入ISO镜像
  8. namespace! 报错
  9. js监听iframe关闭_Node.js文档NET[翻译]
  10. SQL Server - FileTable
  11. aspose.word在某个字后面自动换行_服务应用突然宕机了?别怕,Dubbo 帮你自动搞定服务隔离!...
  12. 工作缺点和不足及措施_【工作中存在的问题和不足及改进措施】_工作中的不足与改进_工作中不足及改进措施...
  13. 【Spring Security】Spring Boot + Spring Security 实现自动登录功能
  14. Simple Tips on C++(对于C++的一些建议)
  15. 计算机插补,插补原理及控制方法
  16. 如何修改桌面的存放路径?(将桌面放到D盘或E盘)
  17. Windows蓝牙设备自动断开问题
  18. 随手记——echarts图表
  19. 三星 android 自定义物理按键,新机皇驾到!三星Note10将取消物理按键,网友:这造型逼死强迫症...
  20. 用CainAbel进行ARP欺骗和用Wireshark侦测ARP欺骗

热门文章

  1. 10个T的硬盘都装不下,这几个资源网站的优质资源真的超多
  2. javascript 去掉html标签,js怎么去掉html标签
  3. Linux如何在文件中新建一行,linux – 如何使用sed将文本插入文件的第一行?
  4. 登录企业邮箱imap服务器,企业邮箱IMAP客户端的同步设置
  5. 如何正确安装和设置IBM Lotus Notes 邮箱客户端
  6. 4399c++游戏开发2023届实习笔试
  7. IPSec:IKEv2协议详解
  8. 缓存路由组件+路由组件的2个生命周期钩子 activated 和 deactivated
  9. html模板生成工具_HTML5模板生成器,框架和工具
  10. 服务器租用价格与哪些因素有关?