一道题目 加深对差分和二分的理解

[NOIP2012 提高组] 借教室 - 洛谷

差分

针对区间操作,在本题中体现为多次对序列的区间加上一个数

对差分数组的操作为,

diff[l] += k;

diff[r+1] -= k;

最后通过前缀和来实现整个区间加上一个数的效果。

二分

大多数人对于二分的基础印象可能是:升序的序列查找某个值,如果该值<中间值,则去左侧寻找;如果改值>中间值,则去右侧寻找。

但通过比大小来进行二分只是冰山一角,二分更基本的实质体现在下面所说的。

对于能否二分,有一个界定标准:状态的决策过程或者序列是否满足单调性或者可以局部舍弃性

也就是说序列是有序的,而这里的“有序”是指广义的有序,如果一个数组中的左侧或者右侧都满足某一种条件,而另一侧都不满足这种条件,也可以看作是一种有序。

在本题中体现为,如果第k天能够满足,则前k天必能够满足;若第k天不能满足,则第k天以后都不能满足借教室的需求。

 题解

#include <iostream>
#include <cstring>
using namespace std;const int maxn = 1e6 + 5;
long long s[maxn], t[maxn], d[maxn], r[maxn], diff[maxn], need[maxn];
int n, m;bool canBorrow(int x) {memset(diff, 0, sizeof(diff));for (int i = 1; i <= x; i++) {diff[s[i]] += d[i];diff[t[i] + 1] -= d[i];}for (int i = 1; i <= n; i++) {need[i] = need[i - 1] + diff[i];//cout << i << "need:" << need[i] << endl;if (need[i] > r[i])return false;}return true;
}int main() {cin >> n >> m;for (int i = 1; i <= n; i++)cin >> r[i];for (int i = 1; i <= m; i++)cin >> d[i] >> s[i] >> t[i];if (canBorrow(m)) {cout << "0\n";return 0;}long long l = 1, r = m;while (l < r) {long long mid = (l + r) / 2;if (canBorrow(mid)) {l = mid + 1;} elser = mid;}cout << "-1" << endl << l << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/780060.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch nn.Linear()

nn.Linear就是神经网络中的线性层&#xff0c;类似于数学中的线性函数&#xff0c;可以实现形如yX*weight^Tb的功能。 #导包 import torch.nn as nn import torch#创建1个张量 sampletorch.tensor([1.,10.,100.])#nn.Linear(in_feature,out_feature,bias)&#xff0c;这里设置…

钉钉服务端API报错 错误描述: robot 不存在;解决方案:请确认 robotCode 是否正确

problem 调用钉钉服务端API&#xff0c;机器人发送群聊消息&#xff0c;后台返回报错信息: 钉钉服务端API报错 错误描述: robot 不存在&#xff1b;解决方案:请确认 robotCode 是否正确&#xff1b; reason 定位: 登录后台&#xff0c;查看机器人是存在查看机器人调用权限接…

SQL中添加数据的方式

概述 在SQL中&#xff0c;添加数据主要通过INSERT INTO语句实现。这是一种非常基础且常用的SQL操作&#xff0c;适用于各种关系型数据库管理系统&#xff0c;如MySQL、PostgreSQL、Oracle等。根据提供的搜索结果&#xff0c;我们将详细讨论如何使用INSERT INTO语句&#xff0c;…

爬虫工作量由小到大的思维转变---<第六十二章 Scrapy统计收集器类的分析与应用(1)>

​​​​​​​前言: 在当今信息时代的互联网环境中&#xff0c;网络爬虫正日益成为了获取和分析大量数据的关键工具。网络爬虫的用途广泛&#xff0c;包括搜索引擎的建立、商业情报的收集、舆情分析等。然而&#xff0c;随着互联网规模和复杂性的不断增加&#xff0c;监控和统…

Django创建多app应用

目录 1. 引言 2. 多app创建的两种方式 2.1 多个app结构 2.2 单个apps多个app 3. 最后 1. 引言 在平常业务开发中&#xff0c;我们遇到的功能可能会有很多&#xff0c;单个app的应用可能无法满足我们 这个时候&#xff0c;我们就需要多app应用&#xff0c;例如&#xff1a…

linux 组建raid5详细操作

raid5最多运行损坏一个盘&#xff0c;最少3个盘&#xff0c;容量为少一块硬盘的容量之和。 如果硬盘数量较多&#xff0c;比如8块以上&#xff0c;建议用raid6&#xff0c;raid6最多允许两块硬盘损坏。 如果需要 一、安装raid软件 deb包 apt-get install mdadm或dnf包 dnf …

LeetCode-49. 字母异位词分组【数组 哈希表 字符串 排序】

LeetCode-49. 字母异位词分组【数组 哈希表 字符串 排序】 题目描述&#xff1a;解题思路一&#xff1a;哈希表和排序&#xff0c;这里最关键的点是&#xff0c;乱序单词的排序结果必然是一样的&#xff08;从而构成哈希表的key&#xff09;。解题思路二&#xff1a;解题思路三…

ElasticSearch学习篇11_ANNS之基于图的NSW、HNSW算法

前言 往期博客ElasticSearch学习篇9_文本相似度计算方法现状以及基于改进的 Jaccard 算法代码实现与效果测评_elasticsearch 文字相似度实现方法-CSDN博客 根据论文对文本相似搜索现状做了一个简要总结&#xff0c;然后对论文提到的改进杰卡德算法做了实现&#xff0c;并结合业…

异步实现的一些方式

异步实现的一些方式 事件循环实现回调函数实现 其实主要就是用到std::future和std::async这些&#xff0c;记录一下异步耗时操作是否结束 事件循环实现 其实主要就是这一行代码 std::future<int> fut std::async(std::launch::async, async_operation);#include<i…

探讨Spring Boot的自动配置原理

Spring Boot以其简化Spring应用开发和部署的能力而广受欢迎。其中最引人注目的特性之一就是自动配置&#xff0c;它极大地减少了开发者需要手动编写的配置量。在本篇博客中&#xff0c;我们将深入探讨Spring Boot自动配置的工作原理&#xff0c;以及它是如何使得Spring应用的配…

蓝桥备赛——堆队列

AC code import os import sys import heapq a [] b [] n,k map(int,input().split())for _ in range(n):x,y map(int,input().split())a.append(x)b.append(y) q []# 第一种情况&#xff1a;不打第n个怪兽# 将前n-1个第一次所需能量加入堆 for i in range(n-1):heapq.h…

用xshell或ftp连接本地虚拟机linux系统,centos7修改动态ip地址

如果不知道怎么下载vm本地虚拟机软件或者不知道怎么安装可以参考我上一篇博客 vmWare虚拟机下载安装详细教程,手把手一步一步教学-CSDN博客 安装好虚拟机软件我们想要通过xshell和ftp工具来管理,小黑框不太舒服哈哈哈 一.准备工作 输入命令来查看当前的ip地址 ip addr 可以…

HarmonyOS 应用开发之PageAbility的启动模式

启动模式对应PageAbility被启动时的行为&#xff0c;支持单实例模式、多实例模式两种启动模式。 表1 PageAbility的启动模式 应用开发者可在config.json配置文件中通过“launchType”配置启动模式。示例如下&#xff1a; {"module": {..."abilities": [{…

上位机图像处理和嵌入式模块部署(qmacvisual透视变换)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 说到透视变换&#xff0c;以前我也不明白为什么有这样一个需求。后来在tier1做车道线检测的时候&#xff0c;才知道如果把camera拍摄到的图像做一次…

Delphi模式编程

文章目录 Delphi模式编程涉及以下几个关键方面&#xff1a;**设计模式的应用****Delphi特性的利用****实际开发中的实践** Delphi模式编程的实例 Delphi模式编程是指在使用Delphi这一集成开发环境&#xff08;IDE&#xff09;和Object Pascal语言进行软件开发时&#xff0c;采用…

PHP运行的注意事项和基本语法规范

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

JavaSE day15 笔记

第十五天课堂笔记 数组 可变长参数★★★ 方法 : 返回值类型 方法名(参数类型 参数名 , 参数类型 … 可变长参数名){}方法体 : 变长参数 相当于一个数组一个数组最多只能有一个可变长参数, 并放到列表的最后parameter : 方法参数 数组相关算法★★ 冒泡排序 由小到大: 从前…

Linux网络配置(超详细)

Linux网络配置大全 Linux网络配置一.网络地址配置网络地址查看–ifconfig使用网络配置命令设置网络接口参数-ifconfig禁用(临时)或者重新激活网卡设置虚拟网络接口 修改网络配置文件网络接口配置文件 IP命令详解OPTIONS选项OBJECT对象 ip link 二、获取和修改主机名hostname查看…

java电话号码的字母组合(力扣Leetcode17)

电话号码的字母组合 力扣原题链接 问题描述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 示例 1&#xff1a;…

Java 数据结构篇-深入了解排序算法

概述 排序算法是计算机科学中的基本问题&#xff0c;也是数据结构学习的重要部分。在Java中&#xff0c;我们可以使用各种排序算法来排列数组或列表中的元素。以下是几个常见的排序算法及其基本思想的介绍&#xff1a; 排序算法介绍 1. 冒泡排序&#xff08;Bubble Sort&…