给定数组,求出数组每个数左边比该数小的数的个数

给定一个数组,需要找出数组中每个数左边比该数小的数的个数。这是一道线段树的应用题,通过建立线段树,初始化权值为0,然后遍历数组更新线段树,最后查询线段树获取每个数左侧小于它的数的个数。
摘要由CSDN通过智能技术生成

给定数组,求出数组每个数左边比该数小的数的个数

1.问题描述

​ 给定一个数组num,数组长度为n,求出数组中每个数左边比该数小的数的个数

2.做法

是一道比较典型的线段树的题目.

具体做法是我们以数组中最小的数low和最大的数high为线段树根节点的两个端点,建立线段树,线段树所有节点的权值初始为空.

接着在线段树中依次查询数组中的数x,找到相应的位置.找到后,权值+1,并向上改变父节点的权值,这里是为了统计数组中落在[l,r]区间的数的个数.

最后求解答案时我们只需要在线段树中寻找[low,x-1]节点的值就好,具体过程参考代码(java实现)

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
   
    public static int a;
    public static int b;
    public static int c;
    final static int INF = 0xffffff;
    final static int LOW = -0xfffffff;
    public static class SegmentTreeNode {
   
        SegmentTreeNode leftChild;
        SegmentTreeNode rightChild;
        public int count;
        public int left;
        public int right;
        public int cover;
        public SegmentTreeNode(int left, int right) {
   
            this.left = left;
            this.right = right;
            this.count = 0;
            this.cover = 0;
        }
    }//java线段树的实现

    public static 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值