GDKOI2023 D2T1

article/2025/9/27 6:41:12

前言

相比于D1T1,这题才是真正的签到题,然而,我却爆0了。为了纪念这悲壮的0分,写下了这篇题解。

题目大意

给出 n ( 1 ≤ n ≤ 1 0 5 ) n(1\le n\le 10^5) n(1n105) 个字符串及其出现时间(以几点几分给出),每个字符串会存在 m ( 1 ≤ m ≤ 1440 ) m(1\le m\le 1440) m(1m1440) 个单位时间(分钟),求存在字符串最多的时间点有多少个字符串(注意:同个字符串在同一时间点重叠只算一个字符串

解题思路

实际上,最麻烦的地方是相同会出现重叠,并且不管重叠几次,都只造成 1 1 1 的贡献。所以,显而易见,我们需要将每一个字符串分开考虑。参考下图:
在这里插入图片描述
由于重叠部分也只造成 1 1 1 的贡献,我们考虑进行区间合并。先按照左端点排序:
在这里插入图片描述
如果下一个区间的左端点小于这一个区间的右端点,那么一定可以进行区间合并,也就是将右端点后移,合并后,得到下图:
在这里插入图片描述
再进行区间加即可。相信大家第一个想到的都是差分,可是从这里开始,我突然脑抽了,果断打起了线段树,过了样例(因为太水了……),然后爆0了。赛后调出来了,写篇题解给自己一个警告:就算再喜欢线段树,考场上也尽量不要写!!!

代码实现

#include <bits/stdc++.h>
using namespace std;
struct node {long long l, r, laz, Max;
} segment_tre[10010];
struct node2 {long long f, t;
};
long long n, m, tot;
unordered_map<string, long long> mem;
vector<node2> v[100010], sorted_v[100010];
string s1, s2;
void setup(long long i, long long l, long long r) {segment_tre[i].l = l;segment_tre[i].r = r;if (l == r)return;long long mid = ((l + r) >> 1);setup(i * 2, l, mid);setup(i * 2 + 1, mid + 1, r);
}
void push_d(long long i) {if (segment_tre[i].laz != 0) {segment_tre[i * 2].Max += segment_tre[i].laz;segment_tre[i * 2].laz += segment_tre[i].laz;segment_tre[i * 2 + 1].Max += segment_tre[i].laz;segment_tre[i * 2 + 1].laz += segment_tre[i].laz;segment_tre[i].laz = 0;}return;
}
void change(long long i, long long l, long long r, long long num) {if (segment_tre[i].l >= l && segment_tre[i].r <= r) {segment_tre[i].laz++;segment_tre[i].Max++;return;}push_d(i);if (segment_tre[i * 2].r >= l)change(i * 2, l, r, num);if (segment_tre[i * 2 + 1].l <= r)change(i * 2 + 1, l, r, num);segment_tre[i].Max = max(segment_tre[i * 2].Max, segment_tre[i * 2 + 1].Max);return;
}
long long ask(long long i, long long l, long long r) {if (segment_tre[i].l >= l && segment_tre[i].r <= r)return segment_tre[i].Max;push_d(i);long long value = 0;if (segment_tre[i * 2].r >= l)value = max(value, ask(i * 2, l, r));if (segment_tre[i * 2 + 1].l <= r)value = max(value, ask(i * 2 + 1, l, r));return value;
}
long long work(string s) { return ((s[0] - '0') * 10 + s[1] - '0') * 60 + (s[3] - '0') * 10 + s[4] - '0'; }
int main() {ios::sync_with_stdio(false);cin.tie(0);freopen("switch.in", "r", stdin);freopen("switch.out", "w", stdout);cin >> n >> m;setup(1, 0, 24 * 60);for (int i = 1; i <= n; i++) {cin >> s1 >> s2;if (mem[s1] == 0) {mem[s1] = ++tot;v[tot].push_back((node2){ work(s2), work(s2) + m - 1 });} elsev[mem[s1]].push_back((node2){ work(s2), work(s2) + m - 1 });}for (int i = 1; i <= tot; i++) {sort(v[i].begin(), v[i].end(), [&](node2 q, node2 h) -> bool { return q.f < h.f; });long long f = v[i][0].f, t = v[i][0].t;for (int j = 1; j < v[i].size(); j++)if (v[i][j].f <= t)t = v[i][j].t;else {sorted_v[i].push_back((node2){ f, t });f = v[i][j].f;t = v[i][j].t;}sorted_v[i].push_back((node2){ f, t });}for (int i = 1; i <= tot; i++)for (int j = 0; j < sorted_v[i].size(); j++) change(1, sorted_v[i][j].f, sorted_v[i][j].t, 1);cout << ask(1, 0, 24 * 60);return 0;
}

http://chatgpt.dhexx.cn/article/IIw3xoRN.shtml

相关文章

一文看懂 GD2库

文章目录 一、 GD2简介1、 验证码&#xff08;实际上是一个img&#xff09; 二、 GD2库使用步骤2.1添加扩展2.2修改php配置文件2.3重启服务 三、 GD2里面的常用方法3.1 imagecreate3.2 imagecolorallocate3.3 imagefill3.4 输出图像资源3.5创建真彩画布3.6在图像中写文字3.6.1i…

MySQL的主从复制

MySQL的主从复制 目录 为什么需要主从复制&#xff1f;MySQL 主从复制概念MySQL 主从复制主要用途MySQL主从形式 一主一从一主多从&#xff0c;提高系统的读性能多主一从 &#xff08;从5.7开始支持&#xff09;双主复制级联复制 MySQL 主从复制原理MySQL主从复制的过程MySQL…

redis主从结构 (一主一从,一主多从,主从从)

关闭防火墙和selinux systemctl disable firewalld.service systemctl stop firewalld vim /etc/selinux/config sed -n 7p /etc/selinux/config SELINUXdisabled setenforce 0 从服务器首次做的是全量同步&#xff0c;且同步的数据会覆盖本机的数据 master 192.168.…

Mysql主从模式

文章目录 &#x1f449;&#x1f3fb;前言❤️主从模式说明&#x1f90d;logbin日志&#x1f90d;Mysql主从复制的流程&#x1f90d;主从复制中遇到的问题 ❤️主从模式配置&#x1f90d;Master配置&#x1f90d;Slave配置 ❤️其他设置&#x1f90d;半同步复制&#x1f90d;并…

mysql主从同步

目录 1.创建主从同步用户 2.授予主从同步权限 3.刷新权限 4.修改master配置文件 5.重启MySQL 6.查看master的状态 7.修改slave配置文件 8.重启mysql 9.构建主从连接信息 10.开始同步 11.查看同步信息 12.同步失败 13.同步报错 13.1 server_id冲突 13.2 initiali…

mysql主从原理

目录 一、主从复制原理 1.原理 2.也就是说 3.注意 随着访问量的不断增多&#xff0c;mysql数据库的压力不断增加&#xff0c;需要对mysql进行优化和架构改造&#xff0c;可以使用高可用、主从复制、读写分离、拆分库、拆分表进行优化。下面我们来学习mysql主从复制高可用如…

MySQL主从复制

一、MySQL主从复制原理 在实际的生产中&#xff0c;为了解决Mysql的单点故障已经提高MySQL的整体服务性能&#xff0c;一般都会采用「主从复制」。 比如&#xff1a;在复杂的业务系统中&#xff0c;有一句sql执行后导致锁表&#xff0c;并且这条sql的的执行时间有比较长&…

Mysql主从同步配置

1. mysql主从同步定义 主从同步使得数据可以从一个数据库服务器复制到其他服务器上&#xff0c;在复制数据时&#xff0c;一个服务器充当主服务器&#xff08;master&#xff09;&#xff0c;其余的服务器充当从服务器&#xff08;slave&#xff09;。因为复制是异步进行的&am…

MySQL 的主从架构

数据库主从概念、优点及用途 主从数据库中主是主库的意思&#xff0c;从是从库的意思。数据库主库对外提供读写操作&#xff0c;从库对外提供读操作。 数据库为什么需要主从架构呢&#xff1f; 高可用&#xff0c;实时灾备&#xff0c;用于故障切换。比如主库挂了&#xff0c…

MySQL主从同步(一主一从、一主多从、主从从)等结构的概述与配置

前言&#xff1a;前面我们了解了MySQL数据库的基础知识&#xff0c;今天及接下来的五天时间里我会给大家带来MySQL进阶方面的一些学习总结&#xff0c;如有不足&#xff0c;还请大家留言指出&#xff1b;下面我们就开始今天的内容。 ** 部署mysql主从同步结构 **  主从同步…

MySQL的主从

前言 金三银四面试的时候&#xff0c;面试官经常会问MySQL主从。今天就跟大家聊聊MySQL的主从。 数据库主从概念、优点、用途 数据库主从复制原理 主主、主从、主备的区别 MySQL是怎么保证主从一致的 数据库主从延迟的原因与解决方案 聊聊数据库的高可用方案 1. 数据库…

主从原理,一主多从架构

主从架构总结 主从原理 用binlog做主从&#xff0c;redolog只支持innodb 过程 ①start slave后从库启动io线程连接主库&#xff0c;请求读日志②dump线程根据请求信息读取指定位置后的日志③完成后就响应成功&#xff0c;没有确认机制④IO线程收到信息&#xff0c;将受到的日…

主从复制:主从复制的概述、一主一从架构搭建主从复制的原理、同步数据一致性问题

文章目录 1. 主从复制的概述1.1 如何提升数据库的并发能力1.2 主从复制的作用 2. 主从复制的原理2.1 原理剖析2.2 复制的最大问题2.3 复制的基本原则 3. 一主一从架构搭建3.1 准备工作3.2 主机配置文件3.3 从机配置文件3.4 建立账户并授权3.5 配置需要复制的主机3.6 测试3.7 停…

c/c++经典面试题(高频考点)

一、数据结构及算法&#xff08;快排、归并、堆排等&#xff09; 十大排序算法 数据结构(c/c版)-严蔚敏 数据结构与算法(思维导图&#xff09; E:\学习\4.数据结构(C语言版)].严蔚敏_吴伟民.扫描版.pdf 数据结构分为8类有:数组、栈、队列、链表、树、散列表、堆、图 1.快速排…

吐血整理 | 最常见的 C/C++ 面试题(含答案)

大家好&#xff0c;我是 K 哥&#xff01; 最近群里有小伙伴想跳槽&#xff0c;问我有没有常见的 C/C 面试题。这不正好&#xff0c;K 哥之前整理了一份 PDF&#xff0c;里面包含了各种经典的 C/C 题目&#xff0c;当然更重要的是还附带了非常详细的答案。 K 哥不仅面试之前会反…

2018秋招C/C++面试题总结

博主从8月中旬开始大大小小面试了十几家公司&#xff0c;至今也许是告一段落吧&#xff0c;希望后面会有好结果&#xff0c;因此总结记录一些C/C方向常见的问题。和大家一起学习&#xff01; 参考了互联网的各种资源&#xff0c;自己尝试归类整理&#xff0c;谢谢~ 一、C和C的区…

C++面试题总结,一篇就够了

C面试题汇总 1. C基础1.1 内存模型1.1.0 内存四区1.1.1 简述C、C程序编译的内存分配情况1.1.2 分配函数与释放函数1.1.2.1 malloc / free1.1.2.2 new / delete1.1.2.3 new/delete 与 malloc/free 区别1.1.2.5 calloc 、realloc1.1.2.6 在C中&#xff0c;使用malloc申请的内存能…

C面试题--汇总

目录 一、C语言基础面试题1. gcc编译器编译的完整流程&#xff0c;分别有什么作用&#xff1f;2.什么是回调函数&#xff1f;3.地址能否使用 printf函数中的 %u形式打印&#xff1f;4.结构体与共用体&#xff08;联合体&#xff09;的区别5. static、const、volatile关键字有什…

C/C++ 最常见50道面试题

C/C经典面试题 面试题 1&#xff1a;变量的声明和定义有什么区别 为变量分配地址和存储空间的称为定义&#xff0c;不分配地址的称为声明。一个变量可以在多个地方声明&#xff0c; 但是只在一个地方定义。加入 extern 修饰的是变量的声明&#xff0c;说明此变量将在文件以外或…

C语言经典面试题学习

1. 请填写bool , float, 指针变量 与“零值”比较的if 语句。 提示&#xff1a;这里“零值”可以是0, 0.0 , FALSE 或者“空指针” 。例如int 变量n 与“零值”比较的if 语句为&#xff1a; if ( n 0 ) if ( n ! 0 ) 以此类推。 &#xff08;1&#xff09;请写出bool flag 与“…