P4231 三步必杀

2024-02-28 12:04
文章标签 三步 必杀 p4231

本文主要是介绍P4231 三步必杀,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Problem: P4231 三步必杀

文章目录

  • 思路
  • 解题方法
  • 复杂度
  • Code

思路

这个问题可以使用等差数列差分的思想来解决。等差数列差分主要适用于频繁对原始数组的某个区间进行增减。

解题方法

首先,我们创建一个长度为 n+2 的差分数组 arr,初始化为 0。
然后,我们遍历 m 次操作,对于每一个操作,我们将 s 加到 arr[l] 上,并从 arr[l+1] 中减去 s,然后将 d 加到 arr[l+1] 上,并从 arr[r+1] 中减去 d+e,最后将 e 加到 arr[r+2] 上。这样,arr[i] 就表示第 i 次操作的增减量。
接下来,我们对 arr 数组进行两次前缀和的计算,这样 arr[i] 就变成了第 i 次操作的总增减量。
最后,我们遍历 arr 数组,计算最大值和异或值,并输出。

复杂度

时间复杂度:

O ( n ) O(n) O(n),其中 n 是操作的次数。我们需要遍历 m 次操作,然后对 arr 数组进行两次前缀和的计算。

空间复杂度:

O ( n ) O(n) O(n),我们需要创建一个长度为 n+2 的 arr 数组。

Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;public class Main {static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static StreamTokenizer sr = new StreamTokenizer(in);static int n, m;static int MAXN = (int)(1e7 + 10);static int MAXM = (int)(3e5 + 10);static long[] arr = new long[MAXN];public static void main(String[] args) throws IOException {n = nextInt();m = nextInt();while(m-- > 0) {int l = nextInt();int r = nextInt();int s = nextInt();int e = nextInt();int d = (e - s) / (r - l);set(l, r, s, e, d);}build();long xor = 0, max = 0;for(int i = 1; i <= n; i++) {max = Math.max(max, arr[i]);xor ^= arr[i];}out.println(xor + " " + max);out.flush();}private static void build() {// TODO Auto-generated method stubfor(int i = 1; i <= n; i++) {arr[i] += arr[i - 1];}for(int i = 1; i <= n; i++) {arr[i] += arr[i - 1];}}private static void set(int l, int r, int s, int e, int d) {// TODO Auto-generated method stubarr[l] += s;arr[l + 1] += d - s;arr[r + 1] -= d + e;arr[r + 2] += e;}private static int nextInt() throws IOException {sr.nextToken();return (int) sr.nval;}}

这篇关于P4231 三步必杀的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/755451

相关文章

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2

利用cmd命令三步配置JDK,mysql各种环境变量

利用cmd命令三步配置JDK,mysql各种环境变量

收高德仍无解,阿里还有三步棋

“行云”之前写了《阿里反腐需要一次遵义会议》,今天这一篇是为老东家出主意。行云口述,峰哥整理 有说法称,阿里收购高德违了法律,没申报之类,貌似商务部已经开始调查。 这多少有点矫情。大敌当前存亡时刻,换了谁都会干了再说。老马号召员工到企鹅家里该砸就砸、该摔就摔,豁出去闹革命的架势。中国互联网几十桩官司,被宣判败诉赔几十万就能了事。大公司可以每年投入几百万,干十次。 互联网的历史反复说明

三步提升外链的真正价值

通过阅读百度工程师lee的【谈外链】这篇文章,开始讲的就是怎么判断一个外链是有效外链(百度提出站长所发布的外链,90%都是无效),那就是对用户有帮助,用户真心推荐。只有当你在站内发布的文章对用户有帮助,才会诱发用户把这篇有价值的信息分享到他的圈子里。那我们如何来发布这样的链接,让外链的价值最大化,下面极限营销围绕发布高价值外链来进行讨论: 第一、对用户有价值的信息 对于发布有价值的信息,

三步学会用spring开发OSGI——(第三步:web篇)

接下来就是我们要创建的web工程了,为了简单,我们直接利用virgo所带的模板来新建工程,控制层使用的是spring mvc 3。 创建web工程 打开STS,新建工程,我们选择Sprinng Template Project           图:新建spring template project 选择Spring MVC Project         图:

三步学会用spring开发OSGI——(第二步:工程篇)

在上面已经配置了sts及virgo的环境,并且能够成功的运行virgo服务器了。接下来我们来用sts建几个工程。 我们模拟的是一个注册的例子,在我们实际的案例中,有的时候会把数据写入到数据库,写入到文件或者写入到内存中,已方便不同的操作。也许这个例子不能完全说明问题,但是对于说明如何通过sts来建立工程来说已经足够了。 我们会建立4个Bundle,一个是通过页面进行注册的Bundle,一

三步学会用spring开发OSGI——(第一步:环境篇)

Spring-DM 指的是Spring Dynamic Modules. dm Server 是一个完全模块化部署的,基于OSGi的Java服务器,为运行企业Java应用和Spring应用提供更加强大的灵活性和可靠性。SpringSource应用平台是构建在Spring、OSGi和Apache Tomcat之上的应用服务器,这个新的应用服务器摒弃了原有的Java EE服务器标准,自然而然地将

只要三步,完全解决数据库中文乱码问题

前几天安装MySQL的时候,发现根本没法输入中文,都是乱码,然后在网上查了找了很多文章,整理一下,留作笔记.     安装好数据库后,输入以下指令查看数据库当前编码格式:     mysql> SHOW VARIABLES LIKE 'character%';     不出意外的话,应该有各种latin1,这就是我们要解决掉的 1. 修改my.ini

三步使用 JSON Server 模拟 API

有了设计图之后,后端的 API 往往也才刚刚开始做,在这个时候,能有一个原型工具模拟一份 API 会让一切过的开心很多。 安装 第一步当然是安装啦 Homebrew Homebrew 是 Mac 上的第三方库管理工具,我们使用 Homebrew 来安装 Node.js ruby -e "$(curl -fsSL https://raw.githubusercontent.com

只需三步,使用 KRaft 建立多节点 Kafka 集群

Apache Kafka是一个用 Java 编写的开源分布式事件和流处理平台,用于处理要求苛刻的实时数据馈送。它本质上是可扩展的,具有高吞吐量和高可用性。其设计也具有容错性,每个集群可支持数百个节点。 在本教程中,你将创建一个 Kafka 集群,使用 KRaft共识协议的 Kafka 集群。你将学习如何配置节点成为集群的一部分,并观察主题分区是如何分配给不同节点的。你还将学习如何将主题分配给集群