当前位置: 首页 > news >正文

2025-3-30算法打卡

一,小明的彩灯

1.题目描述:

题目描述

小明拥有 NN 个彩灯,第 ii 个彩灯的初始亮度为 aiai​。

小明将进行 QQ 次操作,每次操作可选择一段区间,并使区间内彩灯的亮度 +x+x(xx 可能为负数)。

求 QQ 次操作后每个彩灯的亮度(若彩灯亮度为负数则输出 00)。

输入描述

第一行包含两个正整数 N,QN,Q,分别表示彩灯的数量和操作的次数。

第二行包含 NN 个整数,表示彩灯的初始亮度。

接下来 QQ 行每行包含一个操作,格式如下:

l r x,表示将区间 l∼rl∼r 的彩灯的亮度 +x+x。

1≤N,Q≤5×1051≤N,Q≤5×105,0≤ai≤1090≤ai​≤109,1≤l≤r≤N1≤l≤r≤N,−109≤x≤109−109≤x≤109

输出描述

输出共 11 行,包含 NN 个整数,表示每个彩灯的亮度。

2.实例:

示例 1

输入

5 3
2 2 2 1 5
1 3 3
4 5 5
1 1 -100

输出

0 5 5 6 10

3.思路:

  1. 输入处理:使用BufferedReader读取输入数据,解析出彩灯数量N和操作次数Q

  2. 初始亮度数组:将彩灯的初始亮度存入数组a,索引从1到N。

  3. 差分数组初始化:创建差分数组diff,用于记录区间操作的变化。

  4. 区间操作处理:对于每个区间操作,更新差分数组的相应位置。

  5. 前缀和计算:通过计算差分数组的前缀和,得到每个位置的总增量inc

  6. 结果计算:将初始亮度与总增量相加,处理负数情况,输出结果。

4:代码:

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] line = br.readLine().split(" ");
        int N = Integer.parseInt(line[0]);
        int Q = Integer.parseInt(line[1]);

        int[] a = new int[N + 1];
        line = br.readLine().split(" ");
        for (int i = 1; i <= N; i++) {
            a[i] = Integer.parseInt(line[i - 1]);
        }

        int[] diff = new int[N + 2]; // 差分数组,索引1到N+1

        for (int q = 0; q < Q; q++) {
            line = br.readLine().split(" ");
            int l = Integer.parseInt(line[0]);
            int r = Integer.parseInt(line[1]);
            int x = Integer.parseInt(line[2]);
            diff[l] += x;
            diff[r + 1] -= x;
        }

        // 计算前缀和得到每个位置的增量
        long[] inc = new long[N + 1];
        for (int i = 1; i <= N; i++) {
            inc[i] = inc[i - 1] + diff[i];
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= N; i++) {
            long res = a[i] + inc[i];
            if (res < 0) {
                sb.append(0);
            } else {
                sb.append(res);
            }
            if (i < N) {
                sb.append(' ');
            }
        }
        System.out.println(sb.toString());
    }
}

相关文章:

  • 一文聊聊接入钉钉H5微应用系统实现免登操作技术思路实现验证
  • 电控---陀螺仪
  • Python-使用API
  • 设计模式-结构型模式-享元模式
  • JVM类加载器详解
  • C++轻量HeaderOnly的JSON库
  • 10组时尚复古美学自然冷色调肖像电影照片调色Lightroom预设 De La Mer – Nautical Lightroom Presets
  • 32.代码题
  • 常用的排序算法------练习4
  • 蓝桥杯专项复习——前缀和
  • allegro skill
  • 中国固定资产投资统计年鉴(1950-2023年)
  • 创建和管理Pod
  • 深入解析最大公约数(GCD)与最小公倍数(LCM)的C++实现
  • 06_约束
  • Java的IO模型、Netty原理详解
  • IDEA中打开项目Vue+Vue基本语法
  • 内网穿透_ZeroTiers部署_广和通SC171_aidlux_嵌入式
  • 在机器人和无人机时代,测绘人的出路在哪里?
  • 【C++初阶】--- 内存管理
  • 长春做网站优化哪家好/站长之家seo信息
  • 哪里可以做网站/北京seo招聘网
  • 成都政务网站建设/西安网站到首页排名
  • 有哪些网站可以兼职做笔译/百度云登陆首页
  • 免费个人网站制作在线/百度seo优化网站
  • 如今做知乎类网站怎么样/网站制作需要多少钱