第四章高级数据结构(四)

本文深入探讨了线段树这一高级数据结构,介绍了懒标记和扫描线法在解决区间问题中的应用。通过实例展示了如何使用线段树解决一个简单的整数问题,包括区间更新和查询操作。此外,还讨论了如何维护序列,以应对不同类型的输入样例,例如区间加法、区间乘法等。
摘要由CSDN通过智能技术生成

线段树

懒标记和扫描线法

243. 一个简单的整数问题2
在这里插入图片描述

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
   
    static int N = 100010;
    static int n, m;
    static int[] w = new int[N];
    static Node[] tr = new Node[N * 4];

    public static void main(String[] args) throws IOException {
   
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] s1 = br.readLine().split(" ");
        n = Integer.parseInt(s1[0]);
        m = Integer.parseInt(s1[1]);
        String[] s2 = br.readLine().split(" ");
        for (int i = 1; i <= n; i++) {
   
            w[i] = Integer.parseInt(s2[i - 1]);
        }
        build(1, 1, n);
        int l, r;
        int d;
        String op = "";
        while (m-- > 0) {
   
            String[] s3 = br.readLine().split(" ");
            op = s3[0];
            l = Integer.parseInt(s3[1]);
            r = Integer.parseInt(s3[2]);
            if (op.equals("C")) {
   
                d = Integer.parseInt(s3[3]);
                modify(1, l, r, d);
            } else {
   
                System.out.println(query(1, l, r));
            }
        }
    }

    private static void build(int u, int l, int r) {
   
        if (l == r) {
   
            tr[u] = new Node(l, r, w[r], 0);
        } else {
   
            tr[u] = new Node(l, r);
            int mid = l + r >> 1;
            build(u << 1, l, mid);
            build(u << 1 | 1, mid + 1, r);
            pushup(u);
        }
    }

    private static void pushup(int u) {
   
        tr[u].sum = tr[u 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值